Q 1:简单聊聊虚拟滚动

虚拟滚动的存在是为了优化 大数据渲染卡顿的问题 假设后端传入了 1 万条数据,直接进行全量渲染,会瞬间绘制 1 万个 dom 出现性能瓶颈 在用户电脑上 会明显感知到卡顿。 如果在不能减少数据的情况下,可以使用虚拟滚动,让用户的体验提升。 具体实现 现在已经有很多丰富的虚拟滚动库了,可以直接引用即可。 不过这里可以简单聊一聊 虚拟滚动的一些实现 首先要规定一个容器。给容器一个高度,限制列表数据在这个容器里面渲染。 然后,根据每个项目的高度 乘 数量,写一个用于撑开高度的第二个容器(scrollHeight)。 然后给要展示出来的项目一个容器(itemsContainer),同时根据这个容器,可以计算出来里面要显示的项目 计算方法为 const showData = originData.slice(startIndex. endIndex) startIndex为 itemsContainer的 scrollTop / 元素高度, endIndex 为 startIndex + itemsContainer的高度 / 元素高度 需要注意的是,itemsContainer需要加一个 transform Y 的偏移值, 高度为 scrollTop

然后在滚动的时候,动态设置 itemsContainer的 scrollTop 和 showData

就可以实现最基础的 虚拟滚动了