2010-08-18 36 views
26

我創建使用新的圖像新形象(),如何知道圖像100%加載與否?

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

然後我指定img.src到img標籤的src在DOM

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

我怎麼能知道img.src有100%的負載?最佳做法是什麼? img.complete在我看來,在某些瀏覽器中有點小錯誤。

因此,換句話說,我需要在img之後才能分配img.src$("#my_img")它是100%加載的。

謝謝!

+0

你還可以添加一個檢查img.complete爲img.naturalWidth看到http://stackoverflow.com/questions/1977871/check-if-an-image-is-loaded-no-errors-in -javascript – fadomire 2015-08-25 17:05:18

回答

47

使用load事件:

img = new Image(); 

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

img.src = image_url; 

也看看:

+0

這個解決方案是否是交叉瀏覽器? – Kirzilla 2010-08-18 10:46:31

+0

@Kirzilla:我想是的,你應該試試看:) – Sarfraz 2010-08-18 10:48:35

+3

我相信,只有在圖像實際上被重新加載時纔會觸發onload。如果圖像被緩存,則onload不會被觸發。有人可以確認嗎? – 2015-03-31 11:02:16

7

使用無極模式:

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 
}) 
+0

這是一個更好的解決方案IMO。如果OP使用jQuery作爲標籤,他可以執行$ .when.apply($,[])'',其中''[]'「是一組promise(即支持多個圖像)。值得注意的是對原生承諾的支持。 – AndFisher 2016-12-05 16:31:29

相關問題