安卓 html 列表滚动卡顿_前端优化手段之一长列表的优化

本文介绍了如何优化安卓设备上HTML列表的滚动性能,通过只显示可视区域的数据并使用transform进行滚动模拟,减少实际渲染的元素数量,从而避免滚动卡顿问题。示例代码和详细解释有助于理解这一前端优化策略。
摘要由CSDN通过智能技术生成
// 实现纲要  //
  • 可视区域展示固定 n 条数据。

  • 监听滚动,样式上通过 transform 来更改偏移量造成滚动的视觉效果。

// 在线例子 //
  • 例子链接在文末。

  • visibleData 可视区域内可见的数据,目前默认固定 10+ 条左右。

  • handleScroll 监听滚动,根据 scrollTop 属性滚动列表。

  • 滚动过程中计算滚动距离和处理显示的数据。
// 原理说明  //

2fa7693910cd40d0dbdb7f27419541c5.png

为何要这么折腾? 如果一次性 DOM 插入大量数据可能会有卡顿问题,所以我们现在就只插入少量数据,然后模拟出滚动的效果。在滚动的过程中,替换数据。 如何模拟滚动效果?

常规的滚动效果,在固定高度的容器内,设置 overflow: auto; 即可。这个时候页面其实隐含“可视区域”概念,就是你看到的内容,而随着滚动,可视区域的顶部内容会往上滑动,移动到可视区域以外的地方,即图上灰色部分。


View 模拟滚动效果

className="list-view-phantom" style={{ height: data.length * itemHeight }} >
{visibleData.map((item, index) => { return (
{item.value}
); })}
  • list-view 作为容器,设置固定高度 400px, 以及滚动条可见 overflow: auto

  • list-view-phantom 作为高度撑起整个列表以便让滚动条出现。

  • list-view-content 作为数据列表的展示,固定 n 条数据。


Data 监听滚动过程
  • 通过 list-view 的 scrollTop 获得滚动距离,并通过 transform 属性制造垂直距离滚动效果。

  • 数据列表的起点通过 scrollTop 除以每条数据的高度可知,终点即为起点加上列表固定的显示条数。


最后,可以点击" https://codesandbox.io/s/longlist-k1j64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值