HTMLImageElement: complete 屬性

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

只讀的 HTMLImageElement 介面的 complete 屬性是一個布林值,表示影像是否已完全載入。

如果影像已完全載入,則返回 true;否則,返回 false

當以下任一情況為真時,影像被認為是完全載入的:

  • 未指定 srcsrcset 屬性。
  • srcset 屬性不存在,並且 src 屬性為空字串 ("")。
  • 影像資源已完全獲取並已排隊等待渲染/合成。
  • 影像元素已確定影像完全可用並準備好使用。
  • 影像“損壞”;即,影像因錯誤而載入失敗,或影像載入被停用。

值得注意的是,由於影像可能是非同步接收的,因此 complete 的值在指令碼執行時可能會發生變化。

示例

考慮一個照片庫應用程式,它提供了將影像開啟到燈箱模式的功能,以便更好地檢視和編輯影像。這些照片可能非常大,因此您不想等待它們載入,因此您的程式碼使用 async/await 在後臺載入影像。

但是,想象一下您有其他程式碼需要在影像載入完成後才能執行,例如在燈箱中對影像執行紅眼去除的命令。理想情況下,如果影像尚未完全載入,此命令甚至不應執行,為了提高可靠性,您希望進行檢查以確保這種情況。

因此,fixRedEyeCommand() 函式(由觸發紅眼去除的按鈕呼叫)在嘗試執行其工作之前會檢查燈箱影像的 complete 屬性的值。下面程式碼中的演示。

js
let lightboxElem = document.querySelector("#lightbox");
let lightboxImgElem = lightboxElem.querySelector("img");
let lightboxControlsElem = lightboxElem.querySelector(".toolbar");

async function loadImage(url, elem) {
  return new Promise((resolve, reject) => {
    elem.onload = () => resolve(elem);
    elem.onerror = reject;
    elem.src = url;
  });
}

async function lightBox(url) {
  lightboxElem.style.display = "block";
  await loadImage("https://some-site.net/huge-image.jpg", lightboxImgElem);
  lightboxControlsElem.disabled = false;
}

// …

function fixRedEyeCommand() {
  if (lightboxElem.style.display === "block" && lightboxImgElem.complete) {
    fixRedEye(lightboxImgElem);
  } else {
    /* can't start doing this until the image is fully loaded */
  }
}

規範

規範
HTML
# dom-img-complete-dev

瀏覽器相容性