uniapp scroll-view 虚拟滚动【适合每条数据高度一致】

基本原理

  • 有一万条数据,我们按10条一页来进行分组,会有1000页
  • 页面滚动到第10页的位置的时候,10页之后和10页之前是不用被显示的,可以直接隐藏掉
  • 如果是数据删除,页面会不流畅,会卡顿一下,且滚动位置也会变
  • 为了保证页面流畅性,我们可以前后各安置一个占位 view(div),前为 prev 后为 next
  • 滚动的时候,动态的改变可视区域的内容且动态的改变前置占位和后置占位的高度

具体实现

简述
  1. js 部分,初始化计算出可视列表,前置占位高度,后置占位高度
  2. html 部分,在 scroll 时,调用js方法,更新可是列表,前置占位高度,后置占位高度

计算出可视列表,前置占位高度,后置占位高度

通过 scrollTop 我们可以精确知道往上滚动了多少项,此时可以精确计算出应该显示的项

  1. 我们首先给 list 所有项增加 pageNumber,以 10 项为一页
  2. 当滚动的时候通过如下计算,可能知道滚动了多少页,得到 scrolledPageNumber
js 复制代码
// 滚动到不可见区域的 item 数量
const scrolledItemNumber = Math.floor(top / 50)
// 滚动到不可见区域的 page 数量
const scrolledPageNumber = Math.floor(scrolledItemNumber / 10)
  1. 为了保证快速滚动的时候,页面往前翻和往后翻都有数据【不出现空白】

我们将可视页码改为 前一页 + 当前页 + 后一页,注意兼容初始页【1,2,3】 的情况

  1. 根据 5,6,7 计算出可视列表,前后高度
js 复制代码
// 获取当前可视页面号码数组
let visibleNumbers = virtualList.visiblePageNumbers
// 计算可视列表的起始位置(页码-1)乘以每页的项数
let start = (visibleNumbers[0] - 1) * pageSize
// 计算可视列表的结束位置(最后一页的页码)乘以每页的项数
let end = visibleNumbers[visibleNumbers.length - 1] * pageSize
// 如果起始位置小于0,则修正为0
if (start < 0) start = 0
// 如果结束位置大于列表总长度,则修正为列表的最后一个位置
if (end > virtualList.list.length - 1) end = virtualList.list.length
// 根据起始和结束位置,从总列表中提取出可视部分的列表
virtualList.visibleList = virtualList.list.slice(start, end)

// 计算列表前的占位高度(起始位置乘以每项的高度)
virtualList.beforePlaceHeight = start * itemHeight
// 计算列表后的占位高度(总长度减去结束位置后的项数乘以每项的高度)
virtualList.afterPlaceHeight = (virtualList.list.length - end) * itemHeight
相关推荐
xshirleyl3 小时前
uniapp小兔鲜儿day3
uni-app
Geek_Vison21 小时前
2026 跨端框架横评:FinClip、Taro、uni-app、Remax、mPaaS 五款工具技术+业务双维度测评
小程序·uni-app·taro·mpaas·小程序容器
RuoyiOffice1 天前
从 0 到 1 搭建 RuoyiOffice:30 分钟跑通后端+前端+移动端
前端·spring boot·uni-app·开源·oa·ruoyioffice·hrm
Geek_Vison1 天前
APP集成了50多个小程序后,如何搭建一个小程序管理平台来管理这些小程序~
小程序·uni-app·apache·mpaas·小程序容器
梦曦i2 天前
uni-router v1.1.1发布:守卫超时保护+路由监听
前端·uni-app
梦曦i2 天前
全面解析uni-router v1.2.0功能
前端·uni-app
不如摸鱼去2 天前
Wot UI 2.1.0 发布:ConfigProvider 全局配置能力升级
ui·小程序·uni-app
PedroQue992 天前
uni-router:uni-app路由管理新选择
前端·uni-app
这是个栗子2 天前
微信小程序开发(九)- uni-app微信小程序商城
微信小程序·小程序·uni-app·vue·vuex
中犇科技2 天前
2026商城APP开发公司 TOP5(电商垂直版)
uni-app