Прокрутка страницы вверх при обновлении в HTML: решение JS

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Функция JavaScript window.scrollTo() дает возможность возвращать просмотр к началу страницы при ее обновлении:

JS
Скопировать код
window.onbeforeunload = function() { window.scrollTo(0, 0); };

Этот код использует событие onbeforeunload, чтобы сбросить прокрутку страницы перед ее закрытием или обновлением.

Кинга Идем в IT: пошаговый план для смены профессии

Управление автоматическим восстановлением прокрутки браузером

История браузера может бывать причиной изменения позиции прокрутки на странице. Для нейтрализации этого поведения устанавливают атрибут history.scrollRestoration в состояние "manual":

JS
Скопировать код
if ('scrollRestoration' in history) { 
  history.scrollRestoration = 'manual';
}

Таким образом, вы получаете полную контроль над прокруткой при навигации по истории браузера, так как отключаете автоматическое управление прокруткой страницей.

Метод управления прокруткой страницы при помощи jQuery

Пользователям jQuery можно предложить следующий способ: привязку выполняемой функции scrollTop(0) к событию $(window).on('beforeunload'):

JS
Скопировать код
$(window).on('beforeunload', function() {
  $(window).scrollTop(0);
});

Описанный здесь код обеспечивает возврат в начало страницы перед ее закрытием, используя для этого метод scrollTop из библиотеки jQuery.

Как использовать событие onbeforeunload правильно

Для избежания ошибок нужно корректно обрабатывать событие window.onbeforeunload:

JS
Скопировать код
window.onbeforeunload = function() { 
  window.scrollTo(0, 0);
};

Необходимо избегать вызова функции setTimeout, поскольку она может привести к непредсказуемым результатам. Событие onbeforeunload срабатывает без задержки.

Визуализация

Воспринимайте прокрутку страницы как взлет американских горок 🎢, которые после каждого обновления страницы начинают движение заново:

Markdown
Скопировать код
При обновлении: 🔄
Текущая позиция: 🎢🔝
Желаемая позиция: 🎢🎠 (уровень земли)

Цель данного решения – заставлять страницу (или американские горки), начинать прокрутку с начальной отметки при каждом обновлении.

HTML
Скопировать код
<body onload="window.scrollTo(0,0);">
    <!-- Содержимое страницы -->
</body>

Таким образом, каждая загрузка страницы (взлет на американских горках) начинается сначала (с верха страницы).

Поддержка стабильной позиции прокрутки на страницах с динамичным содержимым

AJAX и одностраничные приложения (SPA) могут вызывать смещение позиции прокрутки из-за динамичного изменения содержимого. Обязательно возвращайтесь к началу страницы после каждого обновления. В этом случае вызов window.scrollTo(0,0) является необходимым действием после добавления новых элементов на страницу.

Борьба с изменением позиции прокрутки при загрузке медиаконтента

Страницы с большим количеством медиаконтента могут менять позицию прокрутки. Возврат к началу страницы после загрузки всех элементов – это ваша задача. Для этого используйте отслеживание событий загрузки страницы или отдельных изображений.

Кроссбраузерность — проверено!

Разные браузеры обрабатывают событие onbeforeunload по-разному. Не забывайте тестировать свой код в различных браузерах, используйте teхники обнаружения возможностей браузера (feature detection) и полифилы, чтобы создать совместимое с различными браузерами решение.

Полезные материалы

  1. Метод Window: scrollTo() – Web APIs | MDN — Подробное описание метода scrollTo в JavaScript.
  2. Плавная прокрутка | CSS-Tricks — Реализация плавной прокрутки с помощью CSS.
  3. Метод Window scrollTo() | W3Schools — Информация о scrollTo от W3Schools.
  4. Руководство по использованию Vanilla Ajax без jQuery — SitePoint — Альтернативы использования AJAX без привлечения jQuery.
  5. Свойство Document: readyState – Web APIs | MDN — Обзор стадий готовности документа.
  6. Событие Window: unload – Web APIs | MDN — Информация о событии unload и сбросе позиции прокрутки.
  7. Объяснение методов Debouncing и Throttling на примерах | CSS-Tricks — Описание дебаунсинга и троттлинга как методов оптимизации поведения прокрутки.