找回密码
 立即注册
首页 业界区 业界 原生JS实现虚拟列表(不使用Vue,React等前端框架) ...

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

石娅凉 2025-6-4 08:19:31
好家伙,
 
1. 什么是虚拟列表

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

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

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


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


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


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

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

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


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


  • 渲染可见项:只渲染计算出的可见项到DOM中


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


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

Demo.html代码如下:
  1. <strong><!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>原生JavaScript虚拟列表实现</title>
  7.    
  8. </head>
  9. <body>
  10.     <h1 style="text-align: center; margin: 20px 0;">原生JavaScript虚拟列表</h1>
  11.    
  12.         
  13.         
  14.    
  15.    
  16. </body>
  17. </html></strong>
复制代码
 
5.最后总结


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

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





来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册