您现在的位置是:网站首页> 编程资料编程资料
n个容器元素实现无限滚动的实现代码纯html+css实现Element loading效果纯html+css实现奥运五环的示例代码HTML+CSS实现导航条下拉菜单的示例代码html+css实现滚动到元素位置显示加载动画效果纯html+css实现打字效果html+css实现环绕倒影加载特效html输入两个数实现加减乘除功能html中显示特殊符号(附带特殊字符对应表)关于html选择框创建占位符的问题html css3不拉伸图片显示效果
2021-08-29
1783人已围观
简介 这篇文章主要介绍了n个容器元素实现无限滚动的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
场景
如何正确渲染多达10000个元素的列表。
无限下拉加载技术使用户在大量成块的内容面前一直滚动查看。这种方法是在你向下滚动的时候不断加载新内容。

当你使用滚动作为发现数据的主要方法时,它可能使你的用户在网页上停留更长时间并提升用户参与度。随着社交媒体的流行,大量的数据被用户消费。无线滚动提供了一个高效的方法让用户浏览海量信息,而不必等待页面的预加载。
如果我们换一种思维方式,如果一个页面上面有10000个通栏组件构成,我们如何使用5个组件动态去渲染整个页面呢?
解决思路
在对长列表的优化中我们有很多的方案,例如分页,懒加载等等。 有非常好的交互(菊花图),让用户去等待一下。这样的方案也是非常的成功。
如何另辟蹊径?
1. 在单页运用中我们是否可以对分页方案做一次分析,每页10个元素,分页每次渲染10个元素根据
2. 我们能否用一个支架撑起整个列表的长度 当屏幕滚动到对应的位置就渲染对应的10个元素
闪烁问题

当我们按这个思路实现后会出现闪烁的问题,由于滚动事件比较频繁,我们发现在我们看见的元素在不断的重新绘制,因为我们每次的过场是找到哪十个元素是需要渲染的,然后就直接替换了
这里的思路是我在看的到屏幕位置渲染10个再向上和向下各衍生渲染10个,总共30个,控制渲染的时候总是替换最上面或者最下面的元素,这样处于中间我们可以看见的部分就没有做重新重绘渲染。只是在预渲染的数据在做重绘。
原理
实现一个组件,可以显示具有5个元素的固定窗口大小的n个项目的列表: 即在任何时候,无限滚动n元素上也仅存在5个DOM容器。

- ……
- ……
- 长列表内容一般都有规律,这个列表的高度是可以直接通过
- 的个数直接算出来的,比如1000个元素,每个元素的高是60px,那么我们很快就能算出真个列表的高度是60000px
- 有了容器后将内部的
- 相对于
- 进行绝对定位,在用js直接算出每一个
- 对应的'transform: translate3d(0px, 0px, 0px);'属性
- 通过监听scroll时间不断的去找到当前位置需要渲染的
- 的, 和上一组渲染数据进行对比,有相同的
- 就跳过,找出和上一组渲染数据的不同元素,然后做对应的替换
例如: 100 个元素,首页就显示5个,初始化[0,1,2,3,4] 这5个
- 需要渲染,当我向下滚动一点的时候出现 [1,2,3,4,5] 这几个
- 需要渲染,这时候不要直接做整体替换,只应该替换差异项,结构应为[5,1,2,3,4],由于是绝对定位,会脱离标准流,单个的重绘不会影响其他四个,从而提升性能。
如何实现
Document TODO
- 对比替换容器元素的方法总是感觉还能优化,这样就能提升运行效率,从而优化快速滚动出现的白屏
- 这里也出一个思考题[0,1……,10000], 每次从中取出5个元素,新选出来的和旧的进行对比,保留两个数组的交集部分,用新数组里面的新元素替换老数组里面的非交集部分, 例如第一次是[0,1,2,3,4],第二次是[2,3,4,5,6] 那么对比后生成[5,6,2,3,4],第三次如果是[4,5,6,7,8],生成的就为[5,6,7,8,4]。用最少的代码数得到这个结果数组。
小结
- 通过数据完成布局和初始化
- 通过觉得定位让容器脱离标准流
- 通过数据对比,找出差异容器元素,每次重绘尽量少的容器元素。
下期-----组件搭配实现长列表
关键点
- 组件不同于有规律的list, 组件的高度有可能不可控,会根据不同的手机设备而出现不用的高度
- 由于组件高度的同,渲染区域内有几个组件的数量也是不一样的,这就造成了容器个数不一样
- 对于高度不好通过数据直接进行计算的,如果需要一次整体渲染然后通过dom去计算位置和高度是非常耗费第一次加载性能的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- 使用html2canvas对有百度地图的Dom元素处理成图片的解决移动端Html5中百度地图的点击事件Html5如何唤起百度地图App的方法HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码HTML5地理定位与第三方工具百度地图的应用html5定位获取当前位置并在百度地图上显示html5定位并在百度地图上显示的示例
- html 仿百度百科导航下拉菜单功能HTML+CSS实现下拉菜单的实现纯CSS+HTML大型下拉菜单特效HTML+CSS实现简单下拉菜单效果纯html+css制作三级下拉菜单基于HTML5代码实现折叠菜单附源码下载html 可输入下拉菜单的实现方法
- HTML6实现折叠菜单与手风琴菜单的实例代码HTML5+CSS3实现的自定义下拉框菜单效果源码 3D卡片折叠动画
- HTML使用栅格布局实现六种筛子样式的代码详解HTML利用九宫格原理进行网页布局吃透移动端 Html5 响应式布局详解html5页面 rem 布局适配方法HTML+CSS实现单列布局水平居中布局html5 div布局与table布局详解
- 如何为 Element UI 里的 autosize textarea 设置高度如何为element-ui的Select和Cascader添加弹层底部操作按钮
- html中dom元素滚动条滚动控制小结详解js利用dom-drag模拟flash滚动条效果
- 浅析HTML 悬浮float的用法html/css中float浮动的用法实例详解
- html post请求之a标签的两种用法解析详解HTML5 window.postMessage与跨域HTML5中使用postMessage实现Ajax跨域请求的方法
- html+css 实现图片右上角加删除叉、图片删除按钮html+css制作div标签增加右上角删除图标的示例代码
- HTML行内元素与块级元素有哪些及区别详解详解HTML常用的标签中行内元素和块级元素清除行内元素之间HTML空白的几种解决方案
