2013-10-27 5 views
22

При попытке выяснить, сколько веб-страница прокручивается с вершины, какой из них следует использовать один:body.scrollTop против documentElement.scrollTop против window.pagYOffset против window.scrollY

document.body.scrollTop,

document.documentElement.scrollTop,

window.pagYOffset,

window.scrollY

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

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

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

ответ

20

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

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

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

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

b) Поскольку он будет использовать первый, который определен, я думаю, это довольно надежное будущее и стабильное будущее.

Если вы фантазии вы можете сделать это, а также

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

Это https://github.com/Prinzhorn/skrollr/blob/master/src/skrollr.js#L627 сейчас: D – Amio

+0

@ Амио спасибо, я обновил ссылку на конкретную фиксацию, чтобы она не изменилась снова – Prinzhorn

+3

Лучше использовать 'document.documentElement.scrollTop' – McX

1

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

2

Для answear Prinzhorn «s:

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

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

Испытано себя.

+2

document.body.scrollTop в FF не работает, а document.documentElement.scrollTop ведет себя странно: значения иногда являются нечетными. –