前言
近期在做一个网页播放器项目中,用到很多需要展示歌单的列表
一个歌单动辄千百首歌曲,页面中的元素太多导致热重载的时候 chrome 直接崩了
于是无限滚动列表提上日程
写的有点乱,也是第一次用 typescript 写项目,先记录一下
完成效果
思路和需要解决的问题
与懒加载不同,虚拟滚动需要一次性获取所有数据,但是只显示屏幕可见范围内的数据
要做到这些我需要知道:
- 一行的高度
- 屏幕范围内能显示的行数
- 列表在页面中距离网页顶部的位置
- 滚动条高度
假设满屏能容纳 10 条数据,需要加载的数据是一个数组listData
,只需要裁剪数据范围listData.slice(0, 10)
随着滚动条向下,将滚动条高度/一行的高度可以计算出当前行数
而要模拟滚动条高度就要在页面挂载时就手动设置页面的高度一行高度*listData.length
最后也是最关键的是保持列表一直保持在当前位置上,手动设置列表容器padding-top
等于当前滚动条高度
有一个仍未解决的问题,就是每次来回滚动歌曲封面都要重新请求
vue3+setup 写的组件
使用组件
{{ listItem.title }}
到此这篇关于基于Vue3实现列表虚拟滚动效果的文章就介绍到这了,更多相关Vue列表虚拟滚动内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!