uView icon indicating copy to clipboard operation
uView copied to clipboard

bug: 小程序端的 tabs-swiper tabs-item 的 left 值计算问题

Open gd4Ark opened this issue 5 years ago • 0 comments

描述

有这么一个双层的 tabs-swiper 嵌套,第一层 tab 固定,第二层 tab 可以滚动,效果如下图:

image

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

得到结果

image

预期结果

image

我的猜想

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

  • h5端 image

  • 小程序端 image

临时解决方案

目前想到的临时解决方案是在小程序端,手动减去这部分 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)

期待解决该问题,十分感谢!

gd4Ark avatar Dec 31 '20 09:12 gd4Ark