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