当前位置: 首页 > news >正文

react虚拟滚动

function VirtualList({ data, itemHeight, bufferSize = 5 }) {const [scrollTop, setScrollTop] = useState(0);const containerRef = useRef(null);// 计算可视区域范围const viewportHeight = containerRef.current?.clientHeight || 0;const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - bufferSize);const endIndex = Math.min(data.length, startIndex + Math.ceil(viewportHeight / itemHeight) + bufferSize * 2);// 动态渲染的条目const visibleItems = data.slice(startIndex, endIndex);return (<div ref={containerRef}onScroll={(e) => setScrollTop(e.target.scrollTop)}style={{ height: '100%', overflow: 'auto' }}>{/* 占位容器,模拟完整列表高度 */}<div style={{ height: `${data.length * itemHeight}px` }}>{/* 实际渲染的内容 */}<div style={{ transform: `translateY(${startIndex * itemHeight}px)` }}>{visibleItems.map((item, index) => (<div key={item.id} style={{ height: `${itemHeight}px` }}>{item.content}</div>))}</div></div></div>);
}
  1. 缓冲区(bufferSize)​​:在可视区域外额外渲染少量条目,避免快速滚动时出现空白。

  2. 2.

    定高(itemHeight)​​:提前确定条目高度(或使用动态高度预测),简化位置计算。

  3. 3.

    CSS Transform​:用 translateY替代 top属性,利用GPU加速提升性能。

http://www.dtcms.com/a/520781.html

相关文章:

  • 网站404怎么做郑州短视频拍摄制作公司
  • 国外设计作品网站深圳龙岗区地图
  • 网站开发属于软件开发服务吗临沂seo公司稳健火星
  • windows安装rust
  • 图神经网络分享系列-GAT(GRAPH ATTENTION NETWORKS) (一)
  • C语言:整数转字符串(递归实现)
  • fpga芯片挂在线成功,但是固化程序失败的可能原因有哪些?
  • HarmonyOs鸿蒙开发,学生信息管理
  • Android实战进阶 - 单点登录与系统拦截
  • 简要说明网站建设的步骤最权威的做网站优化价格
  • 环境设计网站推荐北京战略咨询公司
  • golang学习笔记:标准库sort
  • VVIC 关键字搜索接口开发:快时尚场景下的智能分词与爆款优先排序实现
  • 数据结构——平衡二叉树
  • 基于Qt实现百度地图路径规划功能
  • 电力电子技术 第六章——磁元件模型
  • Qt+Qml客户端和Python服务端的网络通信原型
  • 个人音乐类网站服务器租借汉滨网站建设
  • Python“魔术方法”详解:self 与 other 的角色与交互
  • 每日SQL练习 -- 24年阿里(医院门诊复诊率与抗生素用药占比统计)
  • Vue项目中资源引入方式详解
  • 单页网站设计欣赏沪深300指数
  • 跨境一件代发平台温州seo关键词优化
  • mvc5网站开发网站长尾关键词排名软件
  • 阿里云渠道商:如何建立阿里云的权限模型?
  • 网站开发 只要凡科精选app
  • 玉溪市网站建设推广移动通信网站建设
  • 《算法通关指南之C++编程篇(5)----- 条件判断与循环(下)》
  • DarkZero
  • python 网站开发怎么部署龙岩有什么招聘本地网站