uni-app scroll-view组件获取scrollLeft失效

aamkag61  于 2022-10-20  发布在  uni-app
关注(0)|答案(1)|浏览(521)

问题描述

app端-纯nvue项目
需要做到当前项居中的效果(例: https://segmentfault.com/a/1190000021318472)

所以每次点击时需要获取scroll-view的left值,之前在小程序端可以正常获取,但是现在新项目在app端获取的值一直为0

导致当点击到后面几个item时,scroll-view组件会后移非常多 在后面出现非常多的留白

ps: 也试过 const dom = uni.requireNativePlugin('dom'); 的方式获取节点信息,获取到的值同样为0

复现步骤

<scroll-view  id="tabbar" ref="tabbar" style="width:750rpx" scroll-with-animation  :scroll-left="tabsScrollLeft">
  <view class="nav-item"  v-for="(item, index) in list" :key="index"  :id="`tab_item_${index}`">
    <text class="color-3 nav-item-txt" >{{item.title}}</text>
    <view class="nav-item-tabs" style="margin-top: 4rpx" v-if="index == currentIndex"></view>
  </view>
</scroll-view>
this.getElementData('#tabbar', (info)=> {
     let list = info
     // 这里list获取到的left始终为0
     console.log(list)
     this.getElementData(`#tab_item_${this.currentIndex}`, (el)=> {
	    // 活动item的宽度
	    // let tabWidth = el.width;
	    // // 活动item的左边到tabs组件左边的距离,用item的left减去tabs的left
	    // let offsetLeft = el.left - list.left;
	    // // 将活动的tabs-item移动到屏幕正中间,实际上是对scroll-view的移动
	    // let scrollLeft = offsetLeft - (list.width - tabWidth) / 2;
	    // this.tabsScrollLeft = scrollLeft < 0 ? 0 : scrollLeft;
     })
  })

  getElementData(el, callback){
      uni.createSelectorQuery().in(this).selectAll(el).boundingClientRect().exec((data) => {
           callback(data[0]);
      });
   }

预期结果

跟小程序一样正常获取到left值

系统信息:

  • 发行平台: app
  • 操作系统 ios 13.6
  • HBuilderX版本 3.2.9
  • 设备信息 iPhone11

补充信息

无法获取left值

wtlkbnrh

wtlkbnrh1#

现在通过scroll-view组件获取到scrollLeft值了,发现问题不在这个上
而是在小程序上 给组件的 scroll-left 赋值的时候 哪怕在后面加上200 500 组件也只会滚动到元素最后一项就不会滚动了
但是在app上赋值给多少距离就滚动多少距离 所以后面会留白
这种兼容的话会修复吗或者有什么方案去解决呢

相关问题