石娅凉 发表于 2025-6-4 08:19:31

原生JS实现虚拟列表(不使用Vue,React等前端框架)

好家伙,
 
1. 什么是虚拟列表

虚拟列表(Virtual List)是一种优化长列表渲染性能的技术。当我们需要展示成千上万条数据时,如果一次性将所有数据渲染到DOM中,会导致页面卡顿甚至崩溃。虚拟列表的核心思想是:只渲染可视区域内的数据,而不是渲染所有数据
 
2. 使用场景

虚拟列表适用于以下场景:

[*]大数据量展示:如聊天记录、新闻列表、商品列表等需要展示大量数据的场景


[*]无限滚动:需要支持用户持续滚动加载更多内容的场景


[*]性能敏感:在低性能设备上运行的应用,需要尽可能减少DOM操作


[*]实时数据更新:频繁更新的数据列表,如股票行情、实时监控数据等
(我觉得实际场景中,分页会用到更多,用户要看的数据,永远只是一小部分,就那么几条,找不到就用搜索
但总要学学)
 
3. 虚拟列表原理

一句话:
 
要看了,再渲染
 
对,就这么简单,下面,进行分步

[*]计算可视区域:确定用户当前可以看到的视口范围


[*]计算可见项:根据视口位置、每项高度,计算出当前应该显示哪些数据项


[*]渲染可见项:只渲染计算出的可见项到DOM中


[*]位置偏移:通过CSS定位,确保可见项在正确的位置显示


[*]监听滚动:当用户滚动时,重新计算可见项并更新DOM
这里几个难点:
我怎么知道哪些数据进入了可视区域?
答:监听滚动距离,滚到哪,就从哪里开始
 
 
4. 实现虚拟列表

Demo.html代码如下:
<strong><!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>原生JavaScript虚拟列表实现</title>
   
</head>
<body>
    <h1 style="text-align: center; margin: 20px 0;">原生JavaScript虚拟列表</h1>
   
      
      
   

   
</body>
</html></strong> 
5.最后总结


为什么滚动到指定位置后会将对应区域数据渲染?
1.监听滚动事件
2.滚动触发数据更新方法

3.根据滚动距离计算当前数据索引
4.根据可视区域计算要渲染数据项
5.渲染数据
6.定位内容
 
 





来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 原生JS实现虚拟列表(不使用Vue,React等前端框架)