Полифилл для pageYOffset в IE8
важность: 3
Обычно в IE8 не поддерживается свойство pageYOffset
. Напишите полифилл для него.
При подключённом полифилле такой код должен работать в IE8:
// текущая прокрутка страницы в IE8
alert( window.pageYOffset );
В стандартном режиме IE8 можно получить текущую прокрутку так:
alert( document.documentElement.scrollTop );
Самым простым, но неверным было бы такое решение:
// "полифилл"
window.pageYOffset = document.documentElement.scrollTop;
// использование "полифилла"
alert( window.pageYOffset );
Код выше не учитывает текущую прокрутку. Он присваивает window.pageYOffset
текущую прокрутку, но при её изменении – не обновляет это свойство автоматически, а поэтому – бесполезен.
Более правильное решение – сделать это свойство геттером. При этом в IE8 для DOM-объектов работает Object.defineProperty
:
// полифилл
Object.defineProperty(window, 'pageYOffset', {
get: function() {
return document.documentElement.scrollTop;
}
});
// использование полифилла
alert( window.pageYOffset );