直接监听 window 的 scroll 事件即可捕获全页滚动,获取滚动距离用 window.scrolly(或 window.pageyoffset)。

直接监听 window 的 scroll 事件即可捕获全页滚动,获取滚动距离用 window.scrollY(或 window.pageYOffset)和 window.scrollX(或 window.pageXOffset),它们是标准、可靠、跨浏览器的属性。
监听全页滚动:用 window.addEventListener
不要绑定在 document 或某个容器上(除非你只关心局部滚动),全页滚动必须监听 window 对象:
- 使用
window.addEventListener('scroll', handler)注册监听器,避免覆盖已有 scroll 事件 - 推荐加
{ passive: true }提升滚动性能(尤其移动端),除非你在 handler 中调用event.preventDefault() - 如需移除监听,保存 handler 引用后用
removeEventListener清理
获取垂直滚动距离:scrollY 和 pageYOffset
window.scrollY 是现代标准属性,返回页面顶部被卷走的像素值(即当前滚动高度)。它与 window.pageYOffset 完全等价,后者兼容性略好(IE9+),但两者在所有主流浏览器中均可安全使用:
console.log(window.scrollY); // 例如:124.5(支持小数,尤其在启用了平滑滚动或缩放时)- 该值为 0 表示页面处于顶部;越大表示向下滚动越多
- 注意:它不包含 body 的 margin 或 transform 影响,反映的是真实的视口滚动偏移
获取水平滚动距离:scrollX 和 pageXOffset
同理,window.scrollX(或 window.pageXOffset)返回水平方向滚动像素值:
- 多数网页默认无水平滚动,所以常为 0;但在宽表格、横向布局或 RTL 页面中可能非零
- 可用于实现横向滚动联动、吸顶导航的 x 轴判断等场景
- 与
scrollY一样,返回浮点数,精度高
获取完整滚动上下文:结合 documentElement 和 body 尺寸
仅靠 scrollY 不足以知道“滚到哪了”,还需总可滚动高度来计算进度或触发逻辑:
- 总滚动高度 =
document.documentElement.scrollHeight(推荐)或document.body.scrollHeight - 视口高度 =
window.innerHeight(不含地址栏等 UI,精确可用) - 滚动百分比 ≈
window.scrollY / (document.documentElement.scrollHeight - window.innerHeight) - 注意:
document.body.scrollHeight在某些 DOCTYPE 下可能不准,优先用document.documentElement
不复杂但容易忽略:滚动事件高频触发,建议配合节流(throttle)或 requestAnimationFrame 优化性能,避免卡顿。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











