uni-app uni.pageScrollTo获取不到元素

uni-app uni.pageScrollTo获取不到元素

操作步骤:

  • 第一步:在某个页面中引入组件
  • 第二步:在组件中渲染元素并添加点击事件
  • 第三步:通过selector属性滚动

预期结果:

  • 可以正常滚动

实际结果:

  • 无法正常滚动
  • Node “xxxx” is not found. PageScrollTo will not trigger.

bug描述:

页面中引入了某一个组件,在该组件中通过selector: “xxx”,选中某个元素滚动,运行到微信小程序后提示以下警告:

  • Node “xxxx” is not found. PageScrollTo will not trigger.

更多关于uni-app uni.pageScrollTo获取不到元素的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

试一下原生微信小程序有没有这个问题

更多关于uni-app uni.pageScrollTo获取不到元素的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题的常见原因是组件内元素的选择器作用域问题。在uni-app中,自定义组件内的元素选择器默认具有隔离性,直接使用组件内元素的ID或class无法在页面级通过uni.pageScrollTo直接定位。

解决方案:

  1. 使用全局选择器
    在组件内为目标元素添加id,并通过selector: '#id'引用。注意确保页面内ID唯一。

  2. 通过组件通信获取元素位置
    在组件内通过this.$parent或Vuex获取页面实例,调用页面的滚动方法:

    // 组件内
    this.$parent.scrollToElement('组件内元素选择器')
    
  3. 使用节点查询
    通过uni.createSelectorQuery().in(this)获取组件内节点信息,再计算滚动位置后调用uni.pageScrollTo

    const query = uni.createSelectorQuery().in(this)
    query.select('#target').boundingClientRect(rect => {
      uni.pageScrollTo({ scrollTop: rect.top })
    }).exec()
    
  4. 延迟执行
    若因渲染时序导致节点未生成,可添加延时:

    setTimeout(() => {
      uni.pageScrollTo({ selector: '#target' })
    }, 100)
回到顶部