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

就只指渲染可视区域内的标签,在滚动的时候不断切换起始和结束的下标来更新视图,同时计算偏移。
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安全错误
数据库的锁怎样保障安全
加工中心如何转数据库
手机软件开发 案例
网络安全法风险评估答案
网络技术与应用课本
廊坊市网联网络技术
地铁通讯网络技术应用
徐汇区专业软件开发服务结构设计
广州软件开发薪资待遇
大理市网络安全工作视频会议
网络差可以开服务器吗
陕西专业软件开发外包
给客户做的软件服务器没有续费
香橙网络技术有限公司
网络安全是双刃剑关于作文
凌重互联网科技
腾讯云 远程连接数据库
国家数据库小粒种子齐粳四
抚州市天气预报软件开发
美国的数据库系统
与生物信息有关的数据库
加油站风险数据库填报
网络安全十三不准图片
数据库数据横纵转换
数据库大小容量对比
软件开发模型的实质
浪潮财务数据库的样子
安卓软件开发条件
软件开发公司主要投入费用
java实现服务器
优品蜂客网络技术有限公司