Запись на курсы по HTML, CSS, JavaScript, PHP, Python, фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
⊗jsSpAsnIL 153 of 294 menu
В течении недели будет ОБНОВЛЕНИЕ УЧЕБНИКОВ PHP. Поменяется структура! Подробнее по ссылке.

Асинхронность загрузки картинок в JavaScript

Картинки, которые динамически создаются через JavaScript, также загружаются асинхронно. Рассмотрим для примера следующий код:

let image = document.createElement('img'); image.src = 'img.png'; document.body.appendChild(image);

Как вы видите, здесь мы создаем тег img, записываем в его src путь к картинке и размещаем эту картинку в body. Картинка, однако, появится на странице не сразу. Дело в том, что когда мы записали в src путь к картинке - браузер начинает скачивать эту картинку с сайта. Как только картинка будет скачана, только тогда браузер сможет ее показать.

Если картинка достаточно большая, а скорость интернета достаточно маленькая, то пользователь сайта некоторое время сможет "полюбоваться" на пустую картинку - пока она не подгрузится.

На самом деле у тега img существует событие load, которое срабатывает при окончании загрузки картинки:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { // сработает по загрузке картинки });

Мы можем использовать это, чтобы разместить картинку на странице, только когда эта картинка будет загружена:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { document.body.appendChild(image); // размещаем по загрузке });

Картинка не обязательно загрузится: может быть такое, что путь к картинке неверный, либо произойдет обрыв интернета, поломка сервера с сайтом или что-то подобное. Говоря другими словами - исключительная ситуация. В этом случае сработает не событие load, а событие error:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { document.body.appendChild(image); }); image.addEventListener('error', function() { // ошибка загрузки картинки });

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

byenru