Почему body.scrollTop устарел?

Похоже на то body.scrollTop (а также body.scrollLeft) не рекомендуется в строгом режиме ES5. В чем причина этого, учитывая, что все еще можно использовать эти свойства на других DOMElements?

Справочная информация:

У меня есть функция, которая пытается увеличить (или уменьшить, как указано) 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

Другие вопросы по тегам