HTMLImageElement: метод decode()
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Метод decode() интерфейса HTMLImageElement возвращает Promise, который разрешается, когда изображение декодировано и его безопасно добавить в DOM.
Это можно использовать для начала загрузки изображения до того, как прикрепить его к элементу в DOM (или добавить его в DOM как новый элемент), чтобы изображение можно было отобразить сразу после добавления в DOM. Это, в свою очередь, предотвращает задержку при отрисовке следующего кадра после добавления изображения в DOM, пока изображение загружается.
Синтаксис
decode()
Параметры
Нет.
Возвращаемое значение
Promise, который выполняется с undefined, когда данные изображения готовы к использованию.
Исключения
EncodingError-
DOMException, указывающий на ошибку при декодировании изображения.
Примечания к использованию
Одно из возможных применений decode(): при загрузке очень больших изображений (например, в онлайн-альбоме изображений) вы можете сначала отобразить миниатюру низкого разрешения, а затем заменить это изображение изображением полного разрешения, создав новый HTMLImageElement, установив его источник на URL изображения полного разрешения, затем используя decode() для получения обещания, которое разрешается, когда изображение полного разрешения готово к использованию. В этот момент вы можете заменить изображение низкого разрешения на изображение полного разрешения, которое теперь доступно.
Примеры
Базовое использование
В следующем примере показано, как использовать метод decode() для управления моментом добавления изображения в DOM.
const img = new Image();
img.src = "nebula.jpg";
img
.decode()
.then(() => {
document.body.appendChild(img);
})
.catch((encodingError) => {
// Do something with the error.
});
Избегание пустых изображений
В приведенном ниже примере, скорее всего, на странице будет отображаться пустое изображение, пока изображение загружается:
const img = new Image(); img.src = "img/logo.png"; document.body.appendChild(img);
Использование decode() задержит вставку изображения в DOM до тех пор, пока оно не будет полностью загружено и декодировано, тем самым избегая проблемы с пустым изображением:
async function getImage() {
const img = new Image();
img.src = "img/logo.png";
await img.decode();
document.body.appendChild(img);
const p = document.createElement("p");
p.textContent = "Image is fully loaded!";
document.body.appendChild(p);
}
Это особенно полезно, если вы динамически меняете существующее изображение на новое, а также предотвращает задержку ненужных отрисовок вне этого кода во время декодирования изображения.
Спецификации
| Спецификация |
|---|
| HTML # dom-img-decode-dev |
Совместимость браузеров
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
decode |
64 | 79 | 68 | 51 | 11.1 | 64 | 68 | 47 | 11.3 | 9.0 | 64 |
См. также
- Что фактически делает атрибут декодирования изображения? на tunetheweb.com (2023)
- Свойство
HTMLImageElement.decoding
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/decode