2009-08-18 7 views
5

Ho una pagina con 10 immagini e desidero dissolvolarle una dopo l'altra una volta che l'immagine è stata scaricata. come posso rilevare che l'immagine è stata caricata e pronta per essere visualizzata? e dovrei scorrere le immagini caricate in dissolvenza e una volta sbiadito in attesa del prossimo caricamento?jquery: dissolvenza immagine dopo immagine

risposta

6

Basta usare l'evento load() su un'immagine. Per esempio.

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

quindi la funzione di caricamento verrà eseguita solo quando l'immagine sarà completamente scaricata? – monkeylee

+0

Sì, succede quando l'immagine è caricata. –

+0

Puoi vederlo in azione qui: http://jsbin.com/ejesu/edit (per tutto il tempo in cui jsbin conserva lo snippet). –

0

È possibile precaricare le immagini (See here) e quindi chiamare sequenzialmente i metodi fadein e fadeout in un ciclo.

+0

ha funzionato la parte di precaricamento ma non voglio sbiadire l'immagine finché non so che è stata precaricata? – monkeylee

+0

È possibile utilizzare l'evento onLoad dell'oggetto immagine appena caricato in questo modo: objImage.onLoad = imagesLoaded() ;. La funzione imagesLoaded viene chiamata dopo che l'immagine è stata caricata. Metti la tua roba fadeout in là. – maxpower47

0

(in base alla risposta di Kris Erickson)

Si può essere in grado di evitare potenziali condizioni di gara, aggiungendo l'evento per l'immagine prima di aggiungerlo al DOM (non confermato ma mi piace giocare sicuro). Anche questo metodo è utile per dissolvere le immagini l'una sull'altra.

Questo è quello che sto usando per un controllo galleria in cui aggiungo un'immagine sopra un'altra immagine e la dissolvenza - poi rimuovo l'immagine in basso se ho già aggiunto 2 immagini.

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

Ecco il codice HTML:

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

Il CSS deve essere impostata come questo o le immagini impilerà invece di essere l'uno sopra l'altro.

#images_container { 
    position: relative; 
} 

#images_container { 
    position: absolute; 
}