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

Image 1 Image 2 Image 3


更多关于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 是一个有效的选择器,且与目标元素的 idclass 匹配。
  • 示例:
    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();
回到顶部