body.scrollTop vs documentElement.scrollTop vs window.pageYOffset vs window.scrollY

时间:2013-10-27 13:25:01

标签: javascript cross-browser scrolltop

当试图找出从顶部滚动了多少网页时,应该使用哪一个:

document.body.scrollTop

document.documentElement.scrollTop

window.pageYOffset

window.scrollY

在这两个不同的场景中我会选择哪一个:

a)如果我想要最大程度的兼容性(当前使用的主浏览器)?

b)如果我想要符合最符合标准/未来证明/严格模式兼容的代码(但不关心支持旧/非标准浏览器)?

5 个答案:

答案 0 :(得分:25)

我在skrollr源中使用了其中三个

return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;

https://github.com/Prinzhorn/skrollr/blob/b98d40820b9864be275e81af382045d72cc5a08a/src/skrollr.js#L627

a)到目前为止,它适用于所有浏览器(过去一年没有人投诉)。

b)因为它将使用已定义的第一个,我想这是非常的未来证明和稳定。

如果你喜欢,你也可以这样做

Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop)

答案 1 :(得分:3)

鉴于skrollr没有使用window.scrollY,这可能是显而易见的,但作为对原始问题的进一步回答:window.pageYOffsetwindow.scrollY的别名。请参阅Window.scrollY

答案 2 :(得分:3)

Prinzhorn 的诉讼:

由于Chrome / Firefox中的bodydocumentElementundefined,因此请更好地使用:

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,但其他三个都可以完美地显示。