Почему body.scrollTop устарел?
Похоже на то body.scrollTop
(а также body.scrollLeft
) не рекомендуется в строгом режиме ES5. В чем причина этого, учитывая, что все еще можно использовать эти свойства на других DOMElement
s?
Справочная информация:
У меня есть функция, которая пытается увеличить (или уменьшить, как указано) scrollTop
ценности всех предков element
До тех пор, пока одно из них не изменится. Мне интересно, если, чтобы остаться жалоба в строгом режиме, я должен специально проверить против body
элемент как цепочка родителей движется вверх.
[Очевидно, body
относится к document.body
]
3 ответа
Это собственное неправильное поведение Chrome, которое устарело, и они предупреждают авторов, чтобы они перестали на него полагаться.
Окно прокрутки представлено document.documentElement
( <html>
) в стандартном режиме или <body>
в режиме причуд. ( Режим Quirks эмулирует рендеринг документов в Navigator 4 и Explorer 5.)
Chrome использует body.scrollTop
представлять позицию прокрутки окна просмотра в обоих режимах, что неправильно. Похоже, они хотят это исправить, поэтому они поощряют авторов писать сценарии для стандартного поведения.
Я не думаю, что вам нужно менять свой код. Там нет ничего плохого в использовании body.scrollTop
в стандартном режиме, если вы понимаете, что представляет позицию прокрутки body
только (обычно 0
, если вы не дали body
поле прокрутки).
Вы можете увидеть предупреждение, выполнив document.body.scrollTop
в консоли:
body.scrollTop
не рекомендуется в строгом режиме. Пожалуйста, используйтеdocumentElement.scrollTop
если в строгом режиме иbody.scrollTop
только если в режиме причуд.
Я заметил, что мой код перестал работать на более новых версиях Chrome. Я исправил это с помощью window.scrollY
До:
var scrollTop = document.body.scrollTop;
Сейчас:
var scrollTop = window.scrollY;
Это работает все время. Вы можете найти больше документации здесь.
Также я использовал:
document.body.scrollTop = 0;
теперь я заменил его на:
window.scrollTo(0, 0);
Следующий код помогает мне устанавливать всплывающее окно в правильном положении при каждом срабатывании события щелчка для всех браузеров.
var scrollTop = window.scrollY; //For all browsers.
var scrollTop = document.body.scrollTop; //This works for only IE Edge specific versions
scrollTop указывает, сколько элементов прокручивается. Это означает, что тело не должно иметь scrollTop, потому что оно никогда не прокручивается, тело имеет верхнюю полосу прокрутки, поэтому его содержимое можно прокручивать, но не само тело.
Последнее изображение на этой странице многое объясняет:
https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop