You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未插入文档的img设置src后资源立即加载,如何实现插入时再加载?

解决img元素提前加载资源的问题

这个问题我碰到过好几次啦,核心原因是浏览器对<img>元素的src属性有特殊处理——只要你给它设置了src(哪怕是空字符串),不管元素有没有插入DOM,浏览器都会立刻尝试加载对应的资源。空字符串的话,浏览器会默认请求当前页面的URL,这就是你看到资源立即加载的原因。

下面给你两种靠谱的解决方案:

方案1:先插入DOM,再设置src

最简单的思路就是:先创建元素、设置其他必要属性(比如alt),等把元素加到页面里之后,再给它赋值src。这样浏览器只会在元素插入文档后才发起资源请求:

// 创建img元素,但先不设置src
const img1 = document.createElement('img');
img1.setAttribute('alt', '浏览器栈图标'); // 可以提前设置alt等非src属性

// 先将元素插入到文档中
document.body.appendChild(img1);

// 现在再设置src,此时才会触发资源加载
img1.src = 'https://caniuse.com/img/browserstack.svg';
// 用setAttribute效果一样:img1.setAttribute('src', 'https://caniuse.com/img/browserstack.svg');

方案2:用自定义属性暂存src,插入后再替换

如果需要提前把资源地址存在元素上(比如做懒加载、批量处理逻辑),可以用data-src这类自定义属性暂存地址,等元素插入DOM后,再把值转移到src属性上:

// 创建img元素,用data-src暂存资源地址
const img1 = document.createElement('img');
img1.setAttribute('data-src', 'https://caniuse.com/img/browserstack.svg');
img1.setAttribute('alt', '浏览器栈图标');

// 插入文档
document.body.appendChild(img1);

// 插入完成后,将data-src的值赋给src,触发加载
img1.src = img1.dataset.src;
// 或者用getAttribute读取:img1.setAttribute('src', img1.getAttribute('data-src'));

这种方法还能扩展成懒加载逻辑——比如监听页面滚动,当图片进入可视区域时再把data-src转成src,进一步优化页面性能。

内容的提问来源于stack exchange,提问作者刘江宇

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:48:52