获取页面滚动距离

兼容各浏览器获取页面滚动距离的方法

问题

如何获取页面的滚动距离值?

解答

获取页面滚动距离有多种方式,不同属性的浏览器支持存在差异。

pageYOffset

属于 window 对象,IE9+、Firefox、Chrome、Opera 均支持,忽略 DOCTYPE 定义规则。

window.pageYOffset

scrollY

属于 window 对象,Firefox、Chrome、Opera 支持,IE 不支持,忽略 DOCTYPE 定义规则。

window.scrollY

document.body.scrollTop

页面未定义 DOCTYPE 文档头时,所有浏览器都支持此属性。

document.body.scrollTop

document.documentElement.scrollTop

页面定义了 DOCTYPE 文档头时,IE、Firefox、Opera(presto 内核)支持此属性,但在 Chrome 和 Safari 下值为 0。

document.documentElement.scrollTop // Chrome、Safari 下为 0

兼容方案

优先使用 window.pageYOffset,然后降级使用 scrollTop

var _scrollLeft = window.scrollX || window.pageXOffset || document.documentElement.scrollLeft
var _scrollTop = window.scrollY || window.pageYOffset || document.documentElement.scrollTop

关键点

  • window.pageYOffset 兼容性最好(IE9+),优先使用
  • window.scrollY 不支持 IE 浏览器
  • document.body.scrollTop 仅在未定义 DOCTYPE 时可用
  • document.documentElement.scrollTop 在 Chrome/Safari 下需要 DOCTYPE,但值可能为 0
  • 使用逻辑或运算符 || 实现降级兼容