HTMLImageElement: loading 属性
的 HTMLImageElement
属性 loading
是一个字符串,其值向 用户代理 提供有关如何处理当前位于窗口 视觉视窗 外部的图像加载的提示。
这有助于通过推迟图像加载(直到预期需要时,而不是在初始页面加载期间立即加载)来优化文档内容的加载。
值
使用说明
注意:在 Firefox 中,loading
属性必须在 src
属性之前定义,否则它无效 (Firefox 错误 1647077).
必须启用 JavaScript
仅在启用 JavaScript 时才会延迟加载。这是一个反跟踪措施,因为如果用户代理在禁用脚本时支持延迟加载,则网站仍然可以通过在页面标记中战略性地放置图像来跟踪用户在整个会话中的近似滚动位置,以便服务器可以跟踪请求了多少图像以及何时请求。
load 事件的时机
当文档已完全处理时,将触发 load
事件。当图像以 eager 模式加载(这是默认设置)时,文档中的每个图像都必须在 load
事件能够触发之前被获取。
通过为 loading
指定 lazy
值,您可以防止图像因请求、获取和处理图像所需的时间而延迟 load
属性的触发。
loading
属性设置为 lazy
但位于初始页面加载时立即位于视觉视窗内的图像,将在布局已知后立即加载,但它们的加载不会延迟 load
事件的触发。换句话说,这些图像在处理 <img>
元素时不会立即加载,但仍然作为初始页面加载的一部分进行加载。它们只是不会影响 load
事件的时机。
这意味着当 load
触发时,可能任何位于视觉视窗内且延迟加载的图像尚未可见。
防止图像延迟加载期间元素发生位移
示例
下面显示的 addImageToList()
函数使用延迟加载将照片缩略图添加到项目列表中,以避免在实际需要之前从网络加载图像。
js
function addImageToList(url) {
const list = document.querySelector("div.photo-list");
let newItem = document.createElement("div");
newItem.className = "photo-item";
let newImg = document.createElement("img");
newImg.loading = "lazy";
newImg.width = 320;
newImg.height = 240;
newImg.src = url;
newItem.appendChild(newImg);
list.appendChild(newItem);
}
规范
规范 |
---|
HTML 标准 # dom-img-loading |
浏览器兼容性
BCD 表仅在浏览器中加载