Перейти к содержимому

События жизненного цикла страницы в JavaScript

В этом подробном руководстве мы рассмотрим четыре ключевых события JavaScript: DOMContentLoaded, load, beforeunload и unload. Эти события играют важную роль в управлении поведением веб-страниц на ключевых этапах взаимодействия пользователя и жизненного цикла страницы. Ниже приведены расширенные описания и интерактивные примеры, которые вы можете запустить прямо в браузере, чтобы увидеть эти события в действии.

Подробный разбор события DOMContentLoaded

Событие DOMContentLoaded срабатывает сразу после того, как HTML-документ полностью разобран, что обычно происходит задолго до загрузки изображений, таблиц стилей и других внешних ресурсов.

Интерактивный пример: DOMContentLoaded в действии

Чтобы увидеть DOMContentLoaded в действии, следующий пример обновляет содержимое элемента div сразу после того, как HTML-документ полностью разобран, но до полной загрузки всей страницы.


html
<!DOCTYPE html>
<html lang="en">
<head>
    <title>DOMContentLoaded Example</title>
</head>
<body>
    <div id="output">Waiting for DOM...</div>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            document.getElementById('output').innerHTML = 'DOM fully loaded and parsed!'
        });
    </script>
</body>
</html>

Этот пример можно вставить в любой HTML-файл и открыть в браузере, чтобы наблюдать, как быстро срабатывает DOMContentLoaded по сравнению с полной загрузкой страницы.

Изучение события load

Событие load необходимо для операций, требующих полной загрузки всей веб-страницы, включая все зависимые ресурсы, такие как изображения и таблицы стилей. Это событие гарантирует, что каждый элемент доступен для манипуляций через скрипты.

Интерактивный пример: Демонстрация события load

Здесь мы создаем пример, в котором сообщение отображается только после того, как на странице полностью загрузится всё содержимое. Как вы можете видеть, событие DOMContentLoaded всегда происходит раньше события load.


html
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Load Event Example</title>
</head>
<body>
  <div>You see first triggered event on top of the other.</div>
  <script>
    window.addEventListener('load', function() {
      const newDiv = document.createElement("div");
      newDiv.innerHTML = 'loaded event happened!'
      document.body.append(newDiv);
    });
    window.addEventListener('DOMContentLoaded', function() {
      const newDiv = document.createElement("div");
      newDiv.innerHTML = 'DOMContentLoaded event happened!'
      document.body.append(newDiv);
    });
  </script>
</body>
</html>

Скопируйте и протестируйте этот код в своей HTML-среде, чтобы увидеть разницу во времени срабатывания между DOMContentLoaded и load.

Обработка события beforeunload

Событие beforeunload невероятно полезно для предотвращения потери данных: оно предупреждает пользователей перед тем, как они покинут страницу, на которой могут быть несохраненные изменения.

Интерактивный пример: Реализация подтверждения beforeunload

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


html
<!DOCTYPE html>
<html lang="en">
<head>
    <title>beforeunload Example</title>
</head>
<body>
    <p>Now if you want to exit this page, a confirmation alert will be shown as a result of the <code>beforeunload</code> event.</p>
    <script>
        window.addEventListener('beforeunload', function(event) {
            event.returnValue = '';
        });
    </script>
</body>
</html>

Протестируйте этот код, перейдя на страницу «Попробуйте сами», а затем попробуйте перейти на другую страницу.

Использование события unload

WARNING

Событие unload устарело, и вы не сможете использовать его в большинстве современных браузеров. Это также считается плохой практикой. Поэтому этот раздел предназначен только для получения дополнительной информации о легаси-коде.

Хотя событие unload используется реже из-за ограничений современных браузеров и роста популярности одностраничных приложений, оно всё ещё может быть актуальным для очистки ресурсов или выполнения аналитики по мере полной выгрузки страницы.

Интерактивный пример: Использование события unload

Этот код показывает сообщение alert при выгрузке страницы. Однако, как упоминалось выше, он устарел и не работает в большинстве современных браузеров.


html
<!DOCTYPE html>
<html lang="en">
<head>
    <title>unload Example</title>
</head>
<body>
    <script>
        window.addEventListener('unload', function(event) {
            alert('Page is unloading...');
            // Perform cleanup tasks or analytics here
        });
    </script>
</body>
</html>

Заключение

Освоив эти события JavaScript, разработчики смогут создавать более надежные, интерактивные и удобные для пользователя веб-приложения. Каждое событие соответствует определенному этапу жизненного цикла веб-страницы — от начальной загрузки до финальной выгрузки, предоставляя разработчикам точный контроль над поведением и производительностью их веб-приложений.

Практика

Что делает событие 'beforeunload' в приведенном примере HTML?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.