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%
python如何将2d平面线图转换成数字2d线稿图?
acejs代码编辑器如何调用openai api实现选择代码修改与代码自动补全?
ace.js如何获取选择文本的开始和结束行数?
如何把qwen code cli或gemini cli的免费调用额度换成http api对外开放接口?
如何限制windows10电脑只能打开指定的程序?
python如何调用ai大模型实现web网页系统的功能测试并生成测试报告?
有没有免费进行web网站ai仿真人测试生成测试报告的mcp服务或api?
Context Engineering到底是啥,有什么用?
如何使用Google veo 3+高斯溅射(Gaussian Splatting)技术生成4d视频?
浏览器中如何实时调用摄像头扫描二维码?