当试图找出从顶部滚动了多少网页时,应该使用哪一个:
document.body.scrollTop
,
document.documentElement.scrollTop
,
window.pageYOffset
,
window.scrollY
在这两个不同的场景中我会选择哪一个:
a)如果我想要最大程度的兼容性(当前使用的主浏览器)?
b)如果我想要符合最符合标准/未来证明/严格模式兼容的代码(但不关心支持旧/非标准浏览器)?
答案 0 :(得分:25)
我在skrollr源中使用了其中三个
return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
a)到目前为止,它适用于所有浏览器(过去一年没有人投诉)。
b)因为它将使用已定义的第一个,我想这是非常的未来证明和稳定。
如果你喜欢,你也可以这样做
Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop)
答案 1 :(得分:3)
鉴于skrollr没有使用window.scrollY
,这可能是显而易见的,但作为对原始问题的进一步回答:window.pageYOffset
是window.scrollY
的别名。请参阅Window.scrollY。
答案 2 :(得分:3)
致 Prinzhorn 的诉讼:
由于Chrome / Firefox中的body
和documentElement
为undefined
,因此请更好地使用:
return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
自己测试。
答案 3 :(得分:0)
Chrome使用documentElement.scrollTop
,firefox使用body.scrollTop
答案 4 :(得分:0)
console.log('body.scrollTop : ' + document.body.scrollTop);
console.log('documentElement.scrollTop : ' + document.documentElement.scrollTop);
console.log('window.pageYOffset : ' + window.pageYOffset);
console.log('window.scrollY : ' + window.scrollY);
输出1:
0
184.8000030517578
184.8000030517578
184.8000030517578
输出2:
0
185.8000037517577
185.8000037517577
185.8000037517577
依此类推...
在Google Chrome上进行了测试-版本85.0.4183.121(正式版本)(64位)
document.body.scrollTop
这里总是给出0,但其他三个都可以完美地显示。