react18虚拟滚动列表

不依赖第三方,借用react18api和原生JS实现一个虚拟滚动列表,如果你的项目比较小,又不想引入第三方的框架,可以拿去用;
虚拟滚动.gif

style样式
    .record_list{// 这里是动态高度height: calc(100% - 116px);overflow-x: hidden;overflow-y: auto;position: relative;.render_box{// 布局设为绝对定位,后续使用translateY动态改变position: absolute;top: 0;left: 0;width: 100%;}}
核心HTML
     {/* 外层盒子 屏幕高度 可滚动*/}<div className={style.record_list} ref={scrollBoxRef} onScroll={virtualBoxScroll}>{/* 空盒子 撑起高度*/}<div style={{ height: `${recordList.length * renderItemHeight}px` }}></div>{/*实际渲染的列表记录*/}<div className={style.render_box}  style={{ transform: `translateY(${startIndex * renderItemHeight}px)` }}>{renderList.map((item: any) => {return <CallLogCard key={item.id} item={item}></CallLogCard>})}</div></div>
逻辑代码
    /*****************初始化变量*****************/// 1.初始配置let expendCount = 4; // 多渲染数量let screenHeight = 700; // 渲染屏幕高度const renderItemHeight = 60; // 每条数据的固定高度// 2.滚动容器Refconst scrollBoxRef = useRef<any>(null);// 3.开始,结束渲染索引const [endIndex, setEndIndex] = useState(20);const [startIndex, setStartIndex] = useState(0);// 4.动态更新渲染列表const renderList = useMemo(() => recordList.slice(startIndex, endIndex),[startIndex, endIndex, recordList],);/*****************方法*****************/// 滚动监听const virtualBoxScroll = () => {// 滑动距离const scrollDistance = scrollBoxRef.current.scrollTop;// 计算新索引/*Math.floor()一个数向下取整*/const startIndex = Math.floor(scrollDistance / renderItemHeight);/*Math.ceil()一个数向上取整*/const endIndex =startIndex + Math.ceil(screenHeight / renderItemHeight) + expendCount; // 多渲染5条// 更新索引setStartIndex(startIndex);setEndIndex(endIndex);};// 历史记录列表const [recordList, setRecordList] = useState<any>([]);// 获取历史记录列表;const pullHistoryPage = () => {/*ajax*/setRecordList([...res.list]);};// 初始化滚动屏幕高度const handleInitScreenHeight = () => {screenHeight = scrollBoxRef.current.clientHeight;/*Math.ceil()一个数向上取整*/expendCount = Math.ceil(screenHeight / renderItemHeight);};useEffect(() => {// 拉取数据pullHistoryPage();// 初始化定位handleInitScreenHeight();}, []);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/475164.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot车辆充电桩管理系统源码和论文

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;车辆充电桩管理系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;…

五分钟搭建本地大数据集群

引言 刚接触大数据以及部分接触大数据多年的伙伴可能从来没有自己搭建过一套属于自己的大数据集群&#xff0c;今天就花点时间聊聊怎么快速搭建一套属于自己、且可用于操作、调试的大数据集群 正文 本次搭建的组件都有以下服务以及对应的版本 hadoop&#xff08;3.2.4&…

糟糕,接口被刷了,怎么办?

前言 在面试时&#xff0c;经常会被问一个问题&#xff1a;如何防止别人恶意刷接口&#xff1f; 这是一个非常有意思的问题&#xff0c;防范措施挺多的。今天这篇文章专门跟大家一起聊聊&#xff0c;希望对你会有所帮助。 1 防火墙 防火墙是网络安全中最基本的安全设备之一&…

OpenAI重磅发布Sora——首个视频生成模型:利用文本-视频人工智能将想象变为现实

想象一下&#xff0c;现在你有一段文本话描述的故事&#xff0c;通过输入这段文本&#xff0c;就可以立刻展开一个生动详细的视频。这就是 OpenAI 神奇的 Sora&#xff0c;一个革命性的文本到视频的 AI 模型。Sora于2024年2月推出&#xff0c;凭借其仅凭文字提示就能生成现实和…

解锁Spring Boot中的设计模式—04.桥接模式:探索【桥接模式】的奥秘与应用实践!

桥接模式 桥接模式也称为桥梁模式、接口模式或者柄体&#xff08;Handle and Body&#xff09;模式&#xff0c;是将抽象部分与他的具体实现部分分离&#xff0c;使它们都可以独立地变化&#xff0c;通过组合的方式建立两个类之间的联系&#xff0c;而不是继承。 桥接模式是一种…

SpringBoot实战:打造企业资产管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

十大经典排序算法之一--------------堆排序(java详解)

一.堆排序基本介绍&#xff1a; 堆排序是利用堆这种数据结构而设计的一种排序算法&#xff0c;堆排序是一种选择排序&#xff0c;它的最坏&#xff0c;最好&#xff0c;平均时间复杂度均为O(nlogn)&#xff0c;它也是不稳定排序。堆是具有以下性质的完全二叉树&#xff1a;每个…

提升企业竞争力:精益生产培训简介——张驰咨询

精益生产&#xff08;Lean Production&#xff09;是一种管理哲学&#xff0c;最早源于日本丰田汽车公司的丰田生产系统&#xff08;Toyota Production System,TPS&#xff09;。这套理念的核心在于最大程度地减少生产过程中的浪费&#xff0c;同时保证产品质量&#xff0c;通过…

【STM32】软件SPI读写W25Q64芯片

目录 W25Q64模块 W25Q64芯片简介 硬件电路 W25Q64框图 Flash操作注意事项 状态寄存器 ​编辑 指令集 INSTRUCTIONS​编辑 ​编辑 SPI读写W25Q64代码 硬件接线图 MySPI.c MySPI.h W25Q64 W25Q64.c W25Q64.h main.c 测试 SPI通信&#xff08;W25Q64芯片简介&am…

机器学习---学习与推断,近似推断、话题模型

1. 学习与推断 基于概率图模型定义的分布&#xff0c;能对目标变量的边际分布&#xff08;marginal distribution&#xff09;或某些可观测变量 为条件的条件分布进行推断。对概率图模型&#xff0c;还需确定具体分布的参数&#xff0c;称为参数估计或学习问 题&#xff0c;…

生成式 AI - Diffusion 模型的数学原理(3)

来自 论文《 Denoising Diffusion Probabilistic Model》&#xff08;DDPM&#xff09; 论文链接&#xff1a; https://arxiv.org/abs/2006.11239 Hung-yi Lee 课件整理 文章目录 一、图像生成模型本质上的共同目标二、最大似然估计三、和VAE的关联四、概率计算 一、图像生成模…

蓝牙耳机哪个品牌质量最好最耐用?蓝牙耳机排行榜前十名分享

​在通勤途中&#xff0c;许多人喜欢通过听音乐来打发时间。如今&#xff0c;无线蓝牙耳机已经取代了有线耳机&#xff0c;让人们摆脱了线缆的束缚。然而&#xff0c;面对市场上众多的蓝牙耳机&#xff0c;许多人仍然不知道该如何选择。我整理出了几款还不错的蓝牙耳机&#xf…