Vue3 实现列表虚拟滚动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue3 实现列表虚拟滚动相关的知识,希望对你有一定的参考价值。

参考技术A 近期在做一个网页播放器项目中,用到很多需要展示歌单的列表

一个歌单动辄千百首歌曲,页面中的元素太多导致热重载的时候 chrome 直接崩了 😢

于是无限滚动列表提上日程

写的有点乱,也是第一次用 typescript 写项目,先记录一下

与懒加载不同,虚拟滚动需要一次性获取所有数据,但是只显示屏幕可见范围内的数据

要做到这些我需要知道:

假设满屏能容纳 10 条数据,需要加载的数据是一个数组 listData ,只需要裁剪数据范围 listData.slice(0, 10)

随着滚动条向下,将 滚动条高度/一行的高度 可以计算出当前行数

而要模拟滚动条高度就要在页面挂载时就手动设置页面的高度 一行高度*listData.length

最后也是最关键的是保持列表一直保持在当前位置上,手动设置列表容器 padding-top 等于 当前滚动条高度

有一个仍未解决的问题,就是每次来回滚动歌曲封面都要重新请求 😮

项目地址

Vue.js 一个超长列表无限滚动加载的解决方案 [掘金]

以上是关于Vue3 实现列表虚拟滚动的主要内容,如果未能解决你的问题,请参考以下文章

web技术分享| 虚拟列表实现

CCVirtualGridList - Cocos Creator 虚拟列表

vue自动触发事件

React实现虚拟列表

React实现虚拟列表

列表无限滚动(虚拟列表)