loading
前言
在本篇文章你将会学到:
IntersectionObserver API
的用法,以及如何兼容。- 如何在
React Hook
中实现无限滚动。 - 如何正确渲染多达10000个元素的列表。 无限下拉加载技术使用户在大量成块的内容面前一直滚动查看。这种方法是在你向下滚动的时候不断加载新内容。
当你使用滚动作为发现数据的主要方法时,它可能使你的用户在网页上停留更长时间并提升用户参与度。随着社交媒体的流行,大量的数据被用户消费。无线滚动提供了一个高效的方法让用户浏览海量信息,而不必等待页面的预加载。
如何构建一个体验良好的无限滚动,是每个前端无论是项目或面试都会碰到的一个课题。
1. 早期的解决方案
关于无限滚动,早期的解决方案基本都是依赖监听scroll事件:
function fetchData() {
fetch(path).then(res => doSomeThing(res.data));
}
window.addEventListener('scroll', fetchData);
然后计算各种.scrollTop()
、.offset().top
等等。
手写一个也是非常枯燥。而且:
scroll
事件会频繁触发,因此我们还需要手动节流。- 滚动元素内有大量
DOM
,容易造成卡顿。
后来出现交叉观察者IntersectionObserver API
,在与Vue
、React
这类数据驱动视图的框架后,无限滚动的通用方案就出来了。