近期在做一个网页播放器项目中,用到很多需要展示歌单的列表
一个歌单动辄千百首歌曲,页面中的元素太多导致热重载的时候 chrome 直接崩了
于是无限滚动列表提上日程
写的有点乱,也是第一次用 typescript 写项目,先记录一下
与懒加载不同,虚拟滚动需要一次性获取所有数据,但是只显示屏幕可见范围内的数据
要做到这些我需要知道:
假设满屏能容纳 10 条数据,需要加载的数据是一个数组listData
,只需要裁剪数据范围listData.slice(0, 10)
随着滚动条向下,将滚动条高度/一行的高度
可以计算出当前行数
而要模拟滚动条高度就要在页面挂载时就手动设置页面的高度一行高度*listData.length
最后也是最关键的是保持列表一直保持在当前位置上,手动设置列表容器padding-top
等于当前滚动条高度
有一个仍未解决的问题,就是每次来回滚动歌曲封面都要重新请求
-
{{ listItem.title }}
项目地址
Vue.js 一个超长列表无限滚动加载的解决方案 [掘金]