uni-app icon indicating copy to clipboard operation
uni-app copied to clipboard

【bug】uni.pageScrollTo(selector)滚动定位的位置错误

Open cucuzi opened this issue 1 year ago • 3 comments

版本信息

HbuilderX 4.15
uni-ui 1.5.0

代码片段

<template>
  <view>
    <view>
      <view v-for="i in 40" :key="'b0'+i">
        <text>红凤凰粉凤凰红粉凤凰花凤凰</text>
      </view>
    </view>
    <view id="main-box0">
      <view v-for="i in 40" :key="'b1'+i">
        <text>红鲤鱼与绿鲤鱼与驴</text>
      </view>
    </view>
    <view id="main-box1">
      <view v-for="i in 100" :key="'b2'+i">
        <text>The quick brown fox jumps over the lazy dog</text>
      </view>
    </view>
    <view id="main-box2">
      <view v-for="i in 100" :key="'b3'+i">
        <text>吃葡萄不吐葡萄皮</text>
      </view>
    </view>
    <uni-popup ref="popup" background-color="#FFF" type="right" safe-area borderRadius="20px 0 0 20px">
      <view class="popup-wrapper">
        <scroll-view scroll-y="true" class="scroll-Y">
          <view class="catalog-body">
            <view class="catalog-item" @click="handleScrollTo('#main-box0')">
              <uni-icons type="forward" size="20"></uni-icons>
              <text>indexof 0</text>
            </view>
            <view class="catalog-item" @click="handleScrollTo('#main-box1')">
              <uni-icons type="forward" size="20"></uni-icons>
              <text>indexof 1</text>
            </view>
            <view class="catalog-item" @click="handleScrollTo('#main-box2')">
              <uni-icons type="forward" size="20"></uni-icons>
              <text>indexof 2</text>
            </view>
          </view>
        </scroll-view>
      </view>
    </uni-popup>
  </view>
</template>

<script>
export default {
  data() {
    return {};
  },
  mounted() {
    this.$refs.popup.open()
  },
  methods: {
    handleScrollTo(value) {
      uni.pageScrollTo({
        selector: value,
        success: (data) => {
          console.log('success' + JSON.stringify(data))
        },
        fail: (data) => {
          console.log('fail' + JSON.stringify(data))
        }
      })
    }
  },
}
</script>

<style lang="scss" scoped>
.popup-wrapper {
  width: 70vw;
  padding: 20px 0 0 20px;
  display: flex;
  flex-direction: column;
  height: 100%;

  &-header {
    padding-right: 20px;
    font-size: 20px;
    line-height: 1;
    margin-bottom: 20px;
  }

  .scroll-Y {
    max-height: calc(100vh - var(--window-top) - var(--window-bottom) - 40px);

    ::-webkit-scrollbar {
      display: block;
      width: 0 !important;
      height: 0 !important;
      background: transparent;
      overflow: auto !important;
    }

    .catalog-body {
      padding-bottom: 20px;

      .catalog-item {
        font-size: 20px;
        line-height: 2.5;
      }
    }
  }
}
</style>

复现步骤

点击indexof 0、indexof 1不会跳转,点击indexof2会跳转到id="main-box1"的位置

https://github.com/dcloudio/uni-app/assets/48954949/d07174dd-3fd1-421b-9097-8e1bc1ce6cf1

个人猜测

可能是滚动定位的位置计算了元素本身的高度。
如果将id放到内部的第一个元素,那么定位的位置就是该元素的高度。下面为该猜测的测试代码:

...
    <view>
      <view id="main-box0">
        <text>红鲤鱼与绿鲤鱼与驴</text>
      </view>
      <view v-for="i in 39" :key="'b1'+i">
        <text>红鲤鱼与绿鲤鱼与驴</text>
      </view>
    </view>
    <view>
      <view id="main-box1">
        <text>The quick brown fox jumps over the lazy dog</text>
      </view>
      <view v-for="i in 99" :key="'b2'+i">
        <text>The quick brown fox jumps over the lazy dog</text>
      </view>
    </view>
    <view>
      <view id="main-box2">
        <text>吃葡萄不吐葡萄皮</text>
      </view>
      <view v-for="i in 99" :key="'b3'+i">
        <text>吃葡萄不吐葡萄皮</text>
      </view>
    </view>
...

https://github.com/dcloudio/uni-app/assets/48954949/2cea9f5b-45df-413d-b546-1d9f8a239ba0

cucuzi avatar May 22 '24 08:05 cucuzi

感谢反馈,你提供了复现代码,请补充更多信息:

  • [ ] 这个你测试是多平台有问题,还是特定的平台有问题?
  • [ ] 使用的 vue2 还是 vue3

Otto-J avatar May 23 '24 04:05 Otto-J

感谢反馈,你提供了复现代码,请补充更多信息:

  • [ ] 这个你测试是多平台有问题,还是特定的平台有问题?
  • [ ] 使用的 vue2 还是 vue3

这个你测试是多平台有问题,还是特定的平台有问题?

h5平台。刚刚在钉钉小程序测试没有这个问题。其他平台由于条件有限现在没测试。

使用的 vue2 还是 vue3

vue2

cucuzi avatar May 23 '24 05:05 cucuzi

我也是,点击没反应 动画

elarbor avatar Sep 18 '24 09:09 elarbor