JavaScript无限滚动核心是监听滚动触底并加载数据,需判断接近底部、防重复触发、管理加载状态;推荐用IntersectionObserver替代scroll事件以提升性能。

JavaScript实现无限滚动,核心是监听滚动位置,在用户快到底部时自动加载新数据并追加到页面末尾。关键在于判断“是否接近底部”、避免重复触发、以及合理管理加载状态。
监听页面滚动并检测触底
通过监听 window.scroll 或目标容器的 scroll 事件,结合元素尺寸与滚动偏移量判断是否该加载:
- 用
document.documentElement.scrollTop || document.body.scrollTop获取垂直滚动距离 - 用
window.innerHeight获取视口高度 - 用
document.documentElement.scrollHeight获取整个文档高度 - 当
scrollTop + innerHeight >= scrollHeight - threshold(如减去100px防抖)即视为接近底部
防止重复加载和节流处理
滚动事件频繁触发,需加锁和节流保障性能与逻辑正确:
- 定义一个
loading = false状态变量,加载开始时设为true,完成后再置为false - 每次进入加载逻辑前先检查
if (loading) return - 可配合
setTimeout或requestIdleCallback做简单节流,或使用IntersectionObserver替代 scroll 监听(更推荐)
使用 IntersectionObserver 更优雅地监听“进入视口”
相比 scroll 事件,IntersectionObserver 性能更好、代码更简洁,适合监听“加载占位符”是否进入视口:
标签: javascript java html app axios ios win
还木有评论哦,快来抢沙发吧~