uni-app 希望 app 的 scroll-view 也支持 scroll-anchoring

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app 希望 app 的 scroll-view 也支持 scroll-anchoring

8 回复

这个跟网速有关系了,目前建议用oss加载,防止跳屏


更网速没有关系,列表是v-for 循环出来的,每次会整体渲染,如果是下拉加载滚动条的位置不会变,上拉加载就会重置滚动条,而且不能提前设置滚动条的scrollTop设置scroll-into-view也一样,必须v-for渲染完成后在this.$nextTick中设置滚动条位置,导致<scroll-view/>会闪屏,而且列表<image/>也是每次重新获取没有使用缓存

所以,你的需求是什么.能否具体说下

聊天上拉加载历史记录,滚动条scrollTop不要重置成0

graceui中有一个聊天界面的模板 你可以看一下他的写法

uni-app 中,scroll-view 组件默认并不支持 scroll-anchoring 特性。scroll-anchoring 是一种浏览器行为,用于在内容动态变化时保持用户的滚动位置,避免页面跳动。虽然 uni-appscroll-view 组件本身不支持这个特性,但你可以通过一些手动的方式来实现类似的效果。

实现思路

  1. 监听内容变化:当 scroll-view 中的内容发生变化时,记录当前的滚动位置。
  2. 动态调整滚动位置:在内容变化后,根据之前记录的滚动位置,动态调整 scroll-view 的滚动位置,以保持用户的视觉焦点。

示例代码

以下是一个简单的示例,展示如何在 uni-app 中手动实现类似 scroll-anchoring 的效果:

<template>
  <view>
    <scroll-view
      :scroll-y="true"
      :style="{ height: '100vh' }"
      @scroll="handleScroll"
      ref="scrollView"
    >
      <view v-for="(item, index) in items" :key="index" class="item">
        {{ item }}
      </view>
    </scroll-view>
    <button @click="addItem">Add Item</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3'],
      scrollTop: 0,
    };
  },
  methods: {
    handleScroll(event) {
      this.scrollTop = event.detail.scrollTop;
    },
    addItem() {
      this.items.push(`Item ${this.items.length + 1}`);
      this.$nextTick(() => {
        this.$refs.scrollView.scrollTop = this.scrollTop;
      });
    },
  },
};
</script>

<style>
.item {
  padding: 20px;
  border-bottom: 1px solid #ccc;
}
</style>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!