new Image(),如何知道图片是否100%加载?

IT技术 javascript jquery
2021-03-19 21:11:02

我正在使用创建新图像

img = new Image();
img.src = image_url;

然后我将 img.src 分配给 DOM 中 img 标签的 src

$("#my_img").attr("src", img.src);

我怎么知道 img.src 已 100% 加载?最佳做法是什么? img.complete在我看来,某些浏览器中的小错误。

所以,换句话说,我只需要在 100% 加载分配img.src$("#my_img")img

谢谢!

2个回答

使用load事件:

img = new Image();

img.onload = function(){
  // image  has been loaded
};

img.src = image_url;

也看看:

有谁知道:img 什么时候发出 http 请求?是在更改 img.src 时吗?
2021-04-20 21:11:02
@Kirzilla:我想是的,你应该试一试:)
2021-05-09 21:11:02
我可以使用上面的图像对象找到MIME类型的文件
2021-05-11 21:11:02
我相信只有在实际重新加载图像时才会触发 onload。如果图像被缓存,则不会触发 onload。有人可以确认吗?
2021-05-15 21:11:02
这个解决方案是跨浏览器吗?
2021-05-16 21:11:02

使用Promise模式:

function getImage(url){
        return new Promise(function(resolve, reject){
            var img = new Image()
            img.onload = function(){
                resolve(url)
            }
            img.onerror = function(){
                reject(url)
            }
            img.src = url
        })
    }

当调用函数时,我们可以非常巧妙地处理它的响应或错误。

getImage('imgUrl').then(function(successUrl){
    //do stufff
}).catch(function(errorUrl){
    //do stuff
})
很好的解决方案,但我建议使用(successUrl) => { //do stufff }).catch((errorUrl) => { //do stuff })(基本上使用(param) =>而不是function(param)因为以这种方式如果您需要this在Promise中使用您仍然拥有原始参考)
2021-04-26 21:11:02
很棒的答案!
2021-04-28 21:11:02
这是 IMO 更好的解决方案。如果 OP 使用 jQuery 作为标记,他可以$.when.apply($, [])在“ []”是一组Promise(即支持多个图像)的地方做。值得一提的是对原生 Promise 的支持。
2021-05-09 21:11:02
美丽的答案。
2021-05-14 21:11:02