uView
uView copied to clipboard
bug: 小程序端的 tabs-swiper tabs-item 的 left 值计算问题
描述
有这么一个双层的 tabs-swiper 嵌套,第一层 tab 固定,第二层 tab 可以滚动,效果如下图:

在 h5 端运行正常,但在微信小程序端,第二层的无法滚动到中间,位置会出现偏移。
得到结果

预期结果

我的猜想
打印两个端的 tabsInfo 数组的 .left 值作比较,发现小程序端的 left 值比 h5 端多了刚好前两个的 tab 的宽度之和(两个屏幕宽度)
-
h5端

-
小程序端

临时解决方案
目前想到的临时解决方案是在小程序端,手动减去这部分 left 值,如下:
// HACK: 在小程序端 left 值把前面的 swiper-item 宽度也算上了,需要纠正回来
setTimeout(() => {
const uTabs = this.$refs.tabSwiper.$refs.uTabs
const extraLeft = uTabs.tabsInfo[0].left
// left 值不正常的时候减少多余的 left 值
if (extraLeft) {
uTabs.tabsInfo = uTabs.tabsInfo.map(e => {
e.left -= extraLeft
e.right -= extraLeft
return e
})
// 重新触发一下,以防之前就滚动到错误的位置
uTabs.setScrollViewToCenter()
}
}, 200)
期待解决该问题,十分感谢!