2010-08-18 6 views
26

Je crée de nouvelles images en utilisantnew Image(), comment savoir si l'image est chargée à 100% ou non?

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

Alors j'assignant img.src à la src de la balise img dans DOM

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

Comment puis-je savoir que img.src a atteint 100% ? Quelle est la meilleure pratique? img.complete me semble un peu buggé dans certains navigateurs. Donc, en d'autres termes, je dois assigner img.src à $("#my_img") seulement après img il a été chargé à 100%.

Merci!

+0

vous pouvez également ajouter un chèque à img.complete pour img.naturalWidth voir http://stackoverflow.com/questions/1977871/check-if-an-image-is-loaded-no-errors-in -javascript – fadomire

Répondre

47

Utilisez l'événement load:

img = new Image(); 

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

img.src = image_url; 

ont également un oeil à:

+0

Est-ce que cette solution est un navigateur? – Kirzilla

+0

@Kirzilla: Je pense que oui, vous devriez essayer :) – Sarfraz

+3

Je crois que l'onload est seulement déclenché si l'image est réellement chargée à nouveau. Si l'image est mise en cache, alors onload ne sera pas déclenché. Quelqu'un peut-il confirmer? –

7

Utilisation du modèle 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 
     }) 
    } 

Et lorsque vous appelez la fonction, nous pouvons gérer sa réponse ou son erreur tout à fait proprement.

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

Ceci est une meilleure solution IMO. si OP utilise jQuery comme tagged, il peut faire '$ .when.apply ($, [])' où '' '[]' "est un tableau de promesses (c'est-à-dire le support de plusieurs images). Il faut aussi noter le soutien aux promesses natives. – AndFisher

Questions connexes