вернуться к уроку

Загрузите изображения с колбэком

важность: 4

Обычно изображения начинают загружаться в момент их создания. Когда мы добавляем <img> на страницу, пользователь не увидит его тут же. Браузер сначала должен его загрузить.

Чтобы показать изображение сразу, мы можем создать его «заранее»:

let img = document.createElement('img');
img.src = 'my.jpg';

Браузер начнёт загружать изображение и положит его в кеш. Позже, когда такое же изображение появится в документе (не важно как), оно будет показано мгновенно.

Создайте функцию preloadImages(sources, callback), которая загружает все изображения из массива sources и, когда все они будут загружены, вызывает callback.

В данном примере будет показан alert после загрузки всех изображений.

function loaded() {
  alert("Изображения загружены")
}

preloadImages(["1.jpg", "2.jpg", "3.jpg"], loaded);

В случае ошибки функция должна считать изображение «загруженным».

Другими словами, callback выполняется в том случае, когда все изображения либо загружены, либо в процессе их загрузки возникла ошибка.

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

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

Открыть песочницу для задачи.

Алгоритм:

  1. Создадим img для каждого ресурса.
  2. Добавим обработчики onload/onerror для каждого изображения.
  3. Увеличиваем счётчик при срабатывании onload или onerror.
  4. Когда значение счётчика равно количеству ресурсов – тогда вызываем callback().

Открыть решение в песочнице.