Почему window.scrollMaxY неправильно возвращает ноль в Firefox

Я пытаюсь написать код, который прокручивает страницу к элементу, а затем корректирует положение прокрутки, чтобы учесть заголовок с position: fixed.

Кажется, что наиболее разумный способ сделать это - использовать что-то в соответствии с

var element = document.getElementById('myElement');
element.scrollIntoView();
if(window.scrollY < window.scrollMaxY)
 window.scroll(0,window.scrollY - 50);

Сначала это работало. Я не знаю, что только что изменилось, но почему-то теперь window.scrollMaxY только что начал возвращать 0 даже там, где явно есть полоса прокрутки, и она не должна быть нулевой.

1 ответ

Прежде чем я даже дочитал вопрос, я понял, в чем проблема, когда я думал об альтернативных решениях.

Зная, что window.scrollMaxY еще не поддерживается WebKit, я нашел тут и на основании этого создал свой собственный полиполк, который был наверху моего файла Javascript.

/* For webkit and any other browser that doesn't have scrollMaxY */
if(!window.scrollMaxY) window.scrollMaxY = document.documentElement.scrollHeight - document.documentElement.clientHeight;

Поскольку большая часть содержимого загружается AJAX, то в момент загрузки страницы значение scrollMaxY равно нулю, что отклоняется до false и заставляет этот код заменять реальное значение результатом этого вычисления, что также оказалось равным нулю.

Решение состоит в том, чтобы модифицировать полиполк, чтобы тест был более конкретным, например, if 'scrollMaxY' in window) а не if(!window.scrollMaxY) и обернуть назначенное значение в функцию.

licensed under cc by-sa 3.0 with attribution.