百万数据在前端流畅展示,并保持滚动条

前端流畅展示大量数据,网上已经有不少前辈讲解这个。小弟有幸也能摸到这个需求,并且产生一些思考。
前端渲染大量节点,只要内存够用,JavaScript肯定是吃得消的,那么主要优化的点就是尽可能的减少DOM渲染。

首先概括读完本文之后,能实现的效果,拿个消息界面举例子:

流畅展示大量(百万)节点,滚动条滚动亦流畅。

上图:


JavaScript文件大小

这里面是30万节点,生成js对象差不多50兆吧。我是一次性加载的,初始化会比较慢,实际使用可以分割小文件加载,异步处理等等。
看效果:


效果图.gif

以下是原理以及实现步骤(附:后面点会有相关插件发布,坑儿我先占了)


前置条件:

需要预先计算节点的准确高度。

  1. 复杂节点:
    文字可以通过创建一个与显示节点相同规格的节点来计算,图片可以外面套一个div,设置一个固定的宽高,图片本身等比缩放(max-width: 100%; max-height:100%;),video,audio同理。
  2. 简单节点:
    比如表格,已经预设了每个节点的高度,就更好办了。否则可以同复杂节点一样,计算一下。

实现原理:(假定父容器为container)

1、将所有节点高度总计,设置给一个div(holder)用它来占位,展示滚动条。
2、再创建一个div(stage)作为显示容器,相对于父容器container定位(left: 0; top: 0,width: 100%;)
3、根据滚动条位置,遍历节点数组(中每个节点的高度)计算出第一个元素(注意,这个元素可能是没有完全滚出屏幕的,需要特别处理)。
4、stage中节点的展示规则为:从第一个元素开始,展示满一屏(即保证stage中元素的总高度刚刚好>=父容器的高度)。
5、stage的top等于stage中第一个元素前所有元素height的总和 - 父容器的scrollTop。
上个动图:

原理.gif

等空了写具体实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 简介网络浏览器很可能是使用最广的软件。在这篇入门文章中,我将会介绍它们的幕后工作原理。我们会了解到,从您在地址栏输...
    wengjq阅读 6,570评论 2 15
  • Element对象对应网页的HTML标签元素。每一个HTML标签元素,在DOM树上都会转化成一个Element节点...
    许先生__阅读 5,871评论 0 2
  • 序言 这是一篇全面介绍 WebKit 和 Gecko 内部操作的入门文章,是以色列开发人员塔利·加希尔大量研究的成...
    小北哥哥阅读 5,435评论 0 5
  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 5,059评论 0 1
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 7,414评论 0 7

友情链接更多精彩内容