Подтвердить что ты не робот

Body.scrollTop vs documentElement.scrollTop vs window.pageYOffset vs window.scrollY

При попытке узнать, сколько веб-страниц было прокручено сверху, какой из них следует использовать:

document.body.scrollTop,

document.documentElement.scrollTop,

window.pageYOffset,

window.scrollY

Какой вариант я бы выбрал в этих 2 отдельных сценариях:

а) Если бы я хотел максимальной совместимости (во всех основных браузерах, используемых в настоящее время)?

б) Если бы я хотел, чтобы код был наиболее совместимым со стандартами/будущим/совместимым со строгим режимом (но не заботился о поддержке старых/нестандартных браузеров)?

4b9b3361

Ответ 1

Я использую три из них в источнике skrollr

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

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

а) Пока это работает во всех браузерах (никто не жаловался в прошлом году).

б) Так как он будет использовать первый, который определен, я думаю, что он достаточно перспективен и стабилен.

Если вы хотите, вы можете это сделать

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

Ответ 2

Учитывая, что skrollr не использует window.scrollY, это, возможно, было очевидно, но в качестве дополнительного ответа на исходный вопрос: window.pageYOffset является псевдонимом для window.scrollY. См. Window.scrollY.

Ответ 3

Кому Prinzhorn:

Так как body и documentElement есть undefined в Chrome/Firefox, лучше используйте:

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

Протестировал себя.

Ответ 4

Chrome использует documentElement.scrollTop, Firefox использует body.scrollTop