Свойство onload в JavaScript: обработка событий загрузки

В этом руководстве вы узнаете, как обрабатывать событие загрузки, которое срабатывает для элементов документа, изображения и скрипта в JavaScript.

Событие загрузки окна

Для window объекта, событие loadзапускается, когда вся веб-страница (HTML) полностью загружена, включая все зависимые ресурсы, включая файлы JavaScript, файлы CSS и изображения.

Для обработки события load вы регистрируете прослушиватель событий, используя метод addEventListener() :

window.addEventListener('load',(event) => {
    console.log('The page has fully loaded');
});

Или используйте свойство onload объекта window :

window.onload = (event) => {
    console.log('The page has fully loaded');
};

Если вы поддерживаете устаревшую систему, вы можете обнаружить, что обработчик событий load зарегистрирован в элементе body HTML-документа, например:

<!DOCTYPE html>
<html>
<head>
    <title>JS load Event Demo</title>
</head>
<body onload="console.log('Loaded!')">
</body>
</html>

По возможности рекомендуется использовать метод addEventListener() для назначения обработчика событий onload.

Событие для изображения

load также срабатывает для изображений. Чтобы обработать событие load для изображений, используйте метод addEventListener() элементов изображения.

В следующем примере используется обработчик событий load, чтобы определить, полностью ли загружено изображение, существующее в дереве DOM:

<!DOCTYPE html>
<html>
<head>
    <title>Image load Event Demo</title>
</head>
<body>
    <img id="logo">
    <script>
        let logo = document.querySelector('#logo');

        logo.addEventListener('load',(event) => {
            console.log('Logo has been loaded!');
        });

        logo.src = "logo.png";
    </script>
</body>
</html>

Вы можете назначить обработчик события onload напрямую, используя атрибут onload элемента <img>, например:

<img id="logo" 
     src="logo.png" 
     onload="console.log('Logo loaded!')">

Если вы создаете элемент изображения динамически, вы можете назначить обработчик события onload перед установкой свойства src следующим образом:

window.addEventListener('load'() => {
    let logo = document.createElement('img');
    // assign and onload event handler
    logo.addEventListener('load',(event) => {
        console.log('The logo has been loaded');
    });
    // add logo to the document
    document.body.appendChild(logo);
    logo.src = 'logo.png';
});

Как это работает:

  • Во-первых, создайте элемент изображения после полной загрузки документа, поместив код в обработчик события загрузки окна.
  • Во-вторых, назначьте обработчик события onload для изображения.
  • В-третьих, добавьте изображение в документ.
  • Наконец, назначьте URL-адрес изображения атрибуту src. Изображение будет загружено в элемент, как только будет установлено свойство src.

Событие загрузки скрипта

Элемент <script> также поддерживает событие load, немного отличающееся от стандартных способов. Событие скрипта load позволяет проверить, полностью ли загружен файл JavaScript.

В отличие от изображений, веб-браузер начинает загрузку файлов JavaScript только после того, как будет присвоено свойство src и в документ будет добавлен элемент <script>.

Следующий код загружает файл app.js после полной загрузки страницы. Он назначает обработчик событий onload для проверки того, полностью ли загружен app.js.

window.addEventListener('load', checkJSLoaded)

function checkJSLoaded() {
    // create the script element
    let script = document.createElement('script');
    
    // assign an onload event handler
    script.addEventListener('load',(event) => {
        console.log('app.js file has been loaded');
    });

    // load the script file
    script.src = 'app.js';
    document.body.appendChild(script);
}

Заключение

  • load возникает, когда документ полностью загружен, включая зависимые ресурсы, такие как файлы JavaScript, файлы CSS и изображения.
  • <img> и <script> также поддерживают событие load.
  • Используйте метод addEventListener() для регистрации обработчика событий onload.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript