2009-08-18 17 views
5

Mam stronę z 10 obrazami i chcę zanikać je jeden po drugim po pobraniu obrazu. jak mogę wykryć, że obraz jest załadowany i gotowy do wyświetlenia? i czy powinienem przejrzeć załadowane obrazy fadeIn i raz wyblakam czekać na następny ładowanie?jquery: fade in image after image

Odpowiedz

6

Wystarczy użyć zdarzenia load() na obrazie. Na przykład.

$('#some_image').hide() 
    .load(function() { 
     $(this).fadeIn(); 
    }) 
    .attr('src', 'images/headshot.jpg') 
+0

, więc czy funkcja ładowania będzie wykonywana tylko wtedy, gdy obraz zostanie w pełni pobrany? – monkeylee

+0

Tak, dzieje się to po załadowaniu obrazu. –

+0

Możesz zobaczyć to w akcji tutaj: http://jsbin.com/ejesu/edit (tak długo, jak długo jsbin zachowuje fragment). –

0

Możesz wstępnie załadować obrazy (See here), a następnie wywołać kolejno metody fadein i fadeout w pętli.

+0

Czy część wstępnego ładowania działa, ale nie chcę zanikać obrazu, dopóki nie zostanie wczytana? – monkeylee

+0

Możesz użyć zdarzenia onLoad obiektu, który właśnie został załadowany: objImage.onLoad = imagesLoaded() ;. Funkcja imagesLoaded jest wywoływana po załadowaniu obrazu. Umieść tam swoje fadeinowe wyciszenia. – maxpower47

0

(Na podstawie odpowiedzi Kris Ericksona)

Możesz być w stanie uniknąć potencjalnych warunków wyścigu dodając zdarzenie do obrazu przed dodaniem do DOM (niepotwierdzony ale lubię go grać bezpieczny). Również ta metoda jest dobra do blaknięcia obrazów jeden na drugim.

To jest to, czego używam do sterowania galerią, w którym dodaję obraz na górze innego obrazu i zaniam go - wtedy usuwam dolny obraz, jeśli dodałem już 2 obrazy.

var url = .....; 
var container = $('#images_container'); 

$("<img />").hide().load(function() { 
    $(this).fadeIn(); 
}).attr('src', url).appendTo($(container)); 

if ($(container).children().length > 2) { 
    $(":nth-child(1)", container).remove(); 
} 

Oto HTML:

<div id="images_container"></div> 

CSS należy ustawić tak czy obrazy będą układać zamiast być na szczycie siebie.

#images_container { 
    position: relative; 
} 

#images_container { 
    position: absolute; 
}