2013-04-13 16 views
6

Mi chiedo se esiste un modo per rilevare l'evento di caricamento di più immagini (in particolare, una funzione deve essere eseguita quando l'ultima immagine in un determinato set ha completato il caricamento).Rileva più eventi di caricamento di immagini

Ad esempio, un utente fa clic su un collegamento e viene visualizzato lighbox con 10 immagini. Quando tutte le immagini sono state caricate, la barra di caricamento dovrebbe scomparire.

jQuery(".lightbox-image").each(function(){ 
    var image = jQuery(this); 
    jQuery('<img />').attr('src', image.attr('src')).load(function(){ 
     hideLoadingBar(); 
    }); 
}); 

Questo innesca purtroppo hideLoadingBar(); troppo presto (dopo una sola immagine ha completato il caricamento).

P.S.
Ho anche bisogno della mia funzione per funzionare dopo che le immagini sono state memorizzate nella cache così: jQuery('#img1, #img2').load(); non funzionerà.

+0

vedere questo http://stackoverflow.com/a/9624426/235710 –

+0

@MohammadAdil Questo è esattamente ciò che non funziona quando le immagini sono già memorizzate nella cache. E non posso 'triggerare ('load')' manualmente perché questo eseguirà 'hideLoadingBar()' troppo presto. – Atadj

+0

se non ho sbagliato il caricamento è sempre un req ajax, hai provato a fare callback? – steo

risposta

2

Dai un'occhiata a questo plug-in jQuery imagesLoaded, dovrebbe essere adatto alle tue esigenze.

1

Bene, sembra che nessuno abbia un'idea migliore, quindi di seguito è la mia soluzione/soluzione alternativa. L'altra risposta a questa domanda è probabilmente quello che si desidera utilizzare, perché è una libreria creata appositamente per questo, ma qui è la soluzione che ho intenzione di usare, perché è più breve e semplice:

var allImages = jQuery(".lightbox-image").length; 
var counter = 0; 
jQuery(".lightbox-image").each(function(){ 
    var image = jQuery(this).find('.myimage'); 
    jQuery('<img />').attr('src', image.attr('src')).load(function(){ 
     counter++; 
     if(counter >= allImages){ 
      hideLoadingBar(); 
     } 
    }); 
}); 

Opere per le immagini memorizzate nella cache e immagini non memorizzate nella cache.

+0

Non penso che usare la lib sia una buona idea per un compito così semplice. –

+0

Cosa succede con questa soluzione se si dispone, ad esempio, di circa 10 immagini piuttosto grandi che vengono attualmente caricate quando viene eseguita questa funzione. Quindi inizierai altri 10 download delle stesse immagini, non è vero? Forse quel rallentamento delle prestazioni è accettabile per te. –

+0

Controlla anche le stranezze del browser [documentate nella pagina del plug-in] (https://github.com/desandro/imagesloaded/wiki/Browser-quirks). –

Problemi correlati