2010-08-18 1 views
26

Ich neues Bild zu schaffen mitneues Image(), wie zu wissen, ob Bild 100% geladen oder nicht?

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

Dann Zuweisung ich img.src auf die src des img-Tag in DOM

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

Wie kann ich wissen, dass img.src 100% geladen ? Was ist die beste Praxis? img.complete scheinen mir in einigen Browsern etwas Buggy.

Also, mit anderen Worten, ich muss img.src zu $("#my_img") nur nach img zuweisen wurde es zu 100% geladen.

Vielen Dank!

+0

Sie auch einen Scheck hinzufügen können für img.naturalWidth img.complete sehen http://stackoverflow.com/questions/1977871/check-if-an-image-is-loaded-no-errors-in -javascript – fadomire

Antwort

47

Verwenden Sie das load Ereignis:

img = new Image(); 

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

img.src = image_url; 

auch einen Blick haben:

+0

Ist diese Lösung Crossbrowser? – Kirzilla

+0

@Kirzilla: Ich denke schon, Sie sollten es versuchen :) – Sarfraz

+3

Ich glaube, dass Onload nur ausgelöst wird, wenn das Bild tatsächlich neu geladen wird. Wenn das Bild zwischengespeichert wird, wird onload nicht ausgelöst. Kann jemand bestätigen? –

7

Mit dem Muster Versprechen:

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

Und wenn wir die Funktion aufrufen, können wir ihre Antwort oder ihren Fehler ganz ordentlich behandeln.

getImage('imgUrl').then(function(successUrl){ 
    //do stufff 
}).catch(function(errorUrl){ 
    //do stuff 
}) 
+0

Dies ist eine bessere Lösung IMO. Wenn OP jQuery als getaggt verwendet, kann er '$ .when.apply ($, [])' tun, wobei "' [] '" ein Array von Versprechen ist (d. h. Unterstützung für mehrere Bilder). Bemerkenswert ist auch die Unterstützung von nativen Versprechungen. – AndFisher

Verwandte Themen