2010-08-18 10 views
26

Tworzę nowy obraz używającnowy obraz(), jak sprawdzić, czy obraz jest w 100% załadowany czy nie?

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

wtedy jestem przypisywania img.src do src tagu img w DOM

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

Skąd mogę wiedzieć, że img.src posiada 100% naładowaną ? Jaka jest najlepsza praktyka? img.complete wydaje mi się mały buggy w niektórych przeglądarkach.

Więc, innymi słowy, muszę przypisać img.src do $("#my_img") dopiero po img został załadowany w 100%.

Dziękujemy!

+0

można również dodać czek img.complete dla img.naturalWidth zobaczyć http://stackoverflow.com/questions/1977871/check-if-an-image-is-loaded-no-errors-in -javascript – fadomire

Odpowiedz

47

Użyj zdarzenie load:

img = new Image(); 

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

img.src = image_url; 

mają również do obejrzenia:

+0

Czy to jest rozwiązanie do crossbrowser? – Kirzilla

+0

@Kirzilla: Myślę, że tak, powinieneś spróbować :) – Sarfraz

+3

Wierzę, że onload jest wyzwalany tylko wtedy, gdy obraz jest faktycznie ładowany od nowa. Jeśli obraz jest zapisany w pamięci podręcznej, ładowanie nie zostanie uruchomione. Czy ktoś może potwierdzić? –

7

Stosując wzór obietnicy

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

A wywołując tę ​​funkcję, możemy całkiem dobrze radzić sobie z jej odpowiedzią lub błędem.

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

To jest lepsze rozwiązanie IMO. jeśli OP używa znacznika jQuery, może zrobić "$ .when.apply ($, [])", gdzie "' [] '" jest zbiorem obietnic (tj. obsługa wielu obrazów). Warto zwrócić uwagę na poparcie dla rodzimych obietnic. – AndFisher

Powiązane problemy