uniapp向上滚动虚拟列表加载更多无缝丝滑滚动如何实现?
网友回复

通过scroll监听和虚拟列表技术实现,完整代码如下:
<template>
<view class="virtual-list">
<scroll-view
class="scroll-view"
scroll-y
:scroll-top="scrollTop"
:style="{ height: height + 'px' }"
@scroll="onScroll"
:scroll-with-animation="false"
>
<view class="loading" v-if="isLoading">加载中...</view>
<view class="list-content" :style="{ height: totalHeight + 'px' }">
<view
v-for="item in visibleData"
:key="item.id"
class="list-item"
:style="{ transform: `translateY(${item.top}px)`, position: 'absolute', width: '100%' }"
>
<view :class="['message', item.isSelf ? 'self' : 'other']">
<view class="avatar">{{item.isSelf ? '我' : '对方'}}</view>
<view class="content">{{item.content}}</view>
</view>
</view>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
height: 0,
itemHeight: 80,
visibleCount: 0,
bufferCount: 5,
listData: [],
visibleData: [],
isLoading: false,
scrollTop: 0,
startIndex: 0,
loadMoreThreshold: 500,
lastLoadTime: 0,
loadCooldown: 1000,
totalHeight: 0,
lastScrollTop: 0,
scrollTimeout: null
}
},
async mounted() {
const sysInfo = uni.getSystemInfoSync()
this.height = sysInfo.windowHeight
this.visibleCount = Math.ceil(this.height / this.itemHeight) + this.bufferCount * 2
await this.initData()
},
methods: {
async initData() {
const initList = Array(30).fill(0).map((_, index) => ({
id: index,
content: `Message ${index}`,
isSelf: Math.random() > 0.5,
top: index * this.itemHeight
}))
this.listData = initList
this.totalHeight = this.listData.length * this.itemHeight
this.updateVisibleData()
},
updateVisibleData() {
...点击查看剩余70%
Cloudflared 和WARP Connector有啥不同?
有没有让本地开源大模型越狱的方法或插件啥的?
如何使用Zero Trust的Tunnels技术将局域网电脑web服务可以公网访问呢?
编程领域ai大模型的排名是怎么样的?
如何修改别人发给我的微信笔记内容?
fbx、obj、glb三维格式模型如何在浏览器中通过three相互转换格式?
python如何实现基于http隧道加密的正向代理服务?
有没有有专门针对 UI 界面截图进行智能标记(Set-of-Mark, SoM) 的开源库和工具?
如何用python实现Set-of-Mark (SoM) 技术?
python如何截取windows指定应用的窗口截图,不用管窗口是不是在最前面?


