微信小程序虚拟列表怎么用
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章将为大家详细讲解有关微信小程序虚拟列表怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是虚拟列表?就只指渲染可视区域内的标签,在滚动的时候不断切换起
千家信息网最后更新 2026年10月31日微信小程序虚拟列表怎么用
这篇文章将为大家详细讲解有关微信小程序虚拟列表怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
什么是虚拟列表?

就只指渲染可视区域内的标签,在滚动的时候不断切换起始和结束的下标来更新视图,同时计算偏移。
demo效果
准备工作
计算一屏可展示多少个列表。
盒子的高度。
滚动中起始位置。
滚动中结束位置。
滚动偏移量。
屏高&盒子高度
在小程序中我们可以利用wx.createSelectorQuery来获取屏高以及盒子的高度。
getEleInfo( ele ) { return new Promise( ( resolve, reject ) => { const query = wx.createSelectorQuery().in(this); query.select( ele ).boundingClientRect(); query.selectViewport().scrollOffset(); query.exec( res => { resolve( res ); }) })},this.getEleInfo('.stock').then( res => { if (!res[0]) retuen; // 屏高 this.screenHeight = res[1].scrollHeight; // 盒子高度 this.boxhigh = res[0].height;})起始&结束&偏移
onPageScroll(e) { let { scrollTop } = e; this.start = Math.floor(scrollTop / this.boxhigh); this.end = this.start + this.visibleCount; this.offsetY = this.start * this.boxhigh; }scrollTop可以理解为距离顶部滚过了多少个盒子 / 盒子的高度 = 起始下标
起始 + 页面可视区域能展示多少个盒子 = 结束
起始 * 盒子高度 = 偏移
computed: { visibleData() { return this.data.slice(this.start, Math.min(this.end, this.data.length)) },}当start以及end改变的时候我们会使用slice(this.start,this.end)进行数据变更,这样标签的内容就行及时进行替换。
优化
快速滚动时底部会出现空白区域是因为数据还没加载完成,我们可以做渲染三屏来保证滑动时数据加载的比较及时。
prevCount() { return Math.min(this.start, this.visibleCount);},nextCount() { return Math.min(this.visibleCount, this.data.length - this.end);},visibleData() { let start = this.start - this.prevCount, end = this.end + this.nextCount; return this.data.slice(start, Math.min(end, this.data.length))},如果做了前屏预留偏移的计算就要修改下:this.offsetY = this.start * this.boxhigh - this.boxhigh * this.prevCount
滑动动时候start、end、offsetY一直在变更,频繁调用setData,很有可能导致小程序内存超出闪退,这里我们在滑动的时候做个节流,稀释setData执行频率。
mounted() { this.deliquate = this.throttle(this.changeDeliquate, 130) }, methods: { throttle(fn, time) { var previous = 0; return function(scrollTop) { let now = Date.now(); if ( now - previous > time ) { fn(scrollTop) previous = now; } } }, changeDeliquate(scrollTop) { this.start = Math.floor(scrollTop / this.boxhigh); this.end = this.start + this.visibleCount; this.offsetY = this.start * this.boxhigh; console.log('执行setData') } }, onPageScroll(e) { let { scrollTop } = e; console.log('滚动================>>>>>>>') this.deliquate(scrollTop); }
从上图可以看出,每次滚动差不多都降低了setData至少两次的写入。
关于"微信小程序虚拟列表怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
盒子
高度
起始
偏移
程序
时候
区域
数据
篇文章
下标
位置
内容
更多
标签
不错
实用
频繁
差不多
上图
不断
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技
科技和互联网公司
互联网最新的科技
科技制造互联网公司
互联网科技公司发展
互联网科技视频
睿民互联网科技
卓越科技互联网 招聘
互联网科技公司的市场部门
本届互联网博览会上的黑科技
畅思互联网科技
华夏恒生科技与互联网科技
互联网科技圈年度人物
上海京穆互联网科技有限公司
江苏苏星互联网科技有限公司
陕西九四连强互联网科技有限公司
兰石爱特工业互联网科技分公司
科技信息时代互联网发展
互联网时代高科技布局
银川新华互联网科技学校招聘
科技与互联网发展
迪茉互联网科技
互联网科技素材视频竖屏
河南住房之家互联网科技
东莞新华互联网科技学校
怎样加入科技互联网
江苏苏星互联网科技有限公司
中国科技和美国互联网
求路客互联网科技电话
青岛易易互联网科技