2010-08-18 18 views
26

estoy creando nueva imagen usandonueva Imagen(), cómo saber si la imagen está cargada al 100% o no?

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

Entonces estoy asignando a img.src src de la etiqueta img en DOM

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

¿Cómo puedo saber que tiene img.src 100% cargada ? cual es la mejor practica? img.complete me parece pequeño error en algunos navegadores.

Entonces, en otras palabras, necesito asignar img.src a $("#my_img") solo después de img que fue 100% cargado.

¡Gracias!

+0

también se puede añadir una comprobación para ver img.complete para img.naturalWidth http://stackoverflow.com/questions/1977871/check-if-an-image-is-loaded-no-errors-in -javascript – fadomire

Respuesta

47

Usar la load evento:

img = new Image(); 

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

img.src = image_url; 

también echar un vistazo a:

+0

¿Es esta solución crossbrowser? – Kirzilla

+0

@Kirzilla: Creo que sí, deberías intentarlo :) – Sarfraz

+3

Creo que la carga solo se activa si la imagen se carga de nuevo. Si la imagen está almacenada en la memoria caché, no se activará la carga. ¿Alguien puede confirmar? –

7

Utilizando el patrón de 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 
     }) 
    } 

Y al llamar a la función, podemos manejar su respuesta o error bastante bien.

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

Esta es una mejor solución IMO. si OP usa jQuery como etiquetado, puede hacer '$ .when.apply ($, [])' donde "' [] '" es una matriz de promesas (es decir, soporte para múltiples imágenes). Vale la pena señalar el apoyo en las promesas nativas también. – AndFisher

Cuestiones relacionadas