uni-app uni.pagescrollTo selector位置不正确
uni-app uni.pagescrollTo selector位置不正确
示例代码:
{
"path": "pages/task/sendTask/sendTask",
"style": {
"navigationStyle": "custom",
"enablePullDownRefresh": false,
"app-plus": {
"bounce": "none" //关闭窗口回弹效果
}
}
}
<view class="content">
<hx-navbar ref="hxnb" :config="config" @clickBtn="handleRightClick" />
</view>
操作步骤:
直接使用uni.pagescrollTo() 用selector 来找位置
预期结果:
这个算不算bug,如果算bug为什么到现在不解决,如果不算bug那我要怎么才能使用这个并且正常,文档没有任何说明。 我希望这个位置能正常的滚动带上自定义navbar的高度,能让我正常的展示。
实际结果:
现在相差一个navbar的高度
bug描述:
在pages.json 里配置 navigationStyle: "custom"后,并且使用了自定义的组件当navbar后,在页面上使用的 uni.pagescrollTo selector 就会少了44个像素,导致位置不正确。 如果开启顶部标题栏,则正常的
| 信息类别 | 详细信息 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Windows |
| PC版本号 | win10 |
| HBuilderX类型 | 正式 |
| HBuilderX版本 | 3.99 |
| 手机系统 | Android |
| 手机版本号 | Android 13 |
| 手机厂商 | vivo |
| 手机机型 | iqoo neo6 |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |

更多关于uni-app uni.pagescrollTo selector位置不正确的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
有人回复吗
更多关于uni-app uni.pagescrollTo selector位置不正确的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在使用 uni.pagescrollTo 时,如果发现 selector 指定的位置不正确,可能是由于以下几个原因导致的。以下是一些常见的排查步骤和解决方案:
1. 检查 selector 是否正确
- 确保
selector是一个有效的选择器,且与目标元素的id或class匹配。 - 示例:
uni.pageScrollTo({ selector: '#targetElement', // 确保页面上存在 id="targetElement" 的元素 duration: 300 }); - 如果使用
class选择器,确保目标元素是唯一的,或者使用更具体的选择器。
2. 确保目标元素已渲染
- 如果目标元素是通过异步数据动态生成的,可能在调用
uni.pageScrollTo时,目标元素还未渲染完成。 - 解决方法:在数据加载完成后再调用
uni.pageScrollTo,或者在nextTick中调用。this.$nextTick(() => { uni.pageScrollTo({ selector: '#targetElement', duration: 300 }); });
3. 检查目标元素的布局
- 如果目标元素的高度或布局发生变化(例如图片未加载完成),可能导致滚动位置不准确。
- 解决方法:确保目标元素的内容已经加载完成,或者使用
setTimeout延迟调用uni.pageScrollTo。
4. 检查滚动容器的设置
- 如果页面有自定义的滚动容器(例如
scroll-view),uni.pageScrollTo可能无法正确识别目标元素。 - 解决方法:直接使用
scroll-view的滚动方法,而不是uni.pageScrollTo。
5. 检查 scrollTop 的计算
- 如果目标元素的
scrollTop计算不正确,可能是因为页面结构复杂或存在嵌套滚动容器。 - 解决方法:手动计算目标元素的
scrollTop,并使用scrollTop参数代替selector。const query = uni.createSelectorQuery().in(this); query.select('#targetElement').boundingClientRect(data => { uni.pageScrollTo({ scrollTop: data.top, duration: 300 }); }).exec();
6. 检查 uni.pagescrollTo 的兼容性
- 确保当前运行的平台支持
uni.pageScrollTo。某些小程序平台可能对selector的支持不完全。 - 解决方法:根据平台特性调整代码,或者使用平台原生的滚动方法。
7. 调试和日志
- 使用
console.log打印目标元素的信息,检查其位置是否正确。 - 示例:
const query = uni.createSelectorQuery().in(this); query.select('#targetElement').boundingClientRect(data => { console.log('Target element position:', data); }).exec();

