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%
Neutralinojs与Electron的区别与不同?
浏览器跨域解决方案有哪些?
有没有开源的solo agent一句话描述就能开发直接运行的前后端应用源代码?
订单支付过程中部分商品库存不足如何处理?
python如何开发一个自定义域名后缀的邮箱系统及登录发送邮件管理web页面?
有没有开源的项目将图片视频声音文字转场特效编排自动生成剪映草稿json文件?
有没有摄像头捕获眼球转动操作鼠标的开源代码?
localstorage如何生成自增的键值对进行增删改查?
python有没有将python脚本与python运行环境一键打包成exe的代码?
nodejs如何执行浏览器中运行的js代码?