2010-12-13 19 views
5

Sto usando javascript per precaricare diverse immagini con il seguente codice:Blocco Javascript fino al completamento del precaricamento dell'immagine?

// do the following for each image where 'this' is the path 
(new Image()).src = this; 

Questo funziona bene - in Firebug vedo ogni immagine scaricare essere licenziato dopo ogni iterazione.

Il mio problema è che voglio bloccare fino al completamento del download effettivo . In altre parole, voglio mostrare all'utente la finestra di dialogo "Download immagine" fino al completamento del download di tutte le immagini.

In questo momento se mi mostra semplicemente la finestra di dialogo prima che il ciclo viene eseguito precarico (e rimuovere la finestra di dialogo dopo il ciclo è completato) rifletta semplicemente l'scaricare richiede NON il download vero e proprio completa.

Poiché sembra che il download effettivo sia asincrono, c'è un modo per bloccare fino al completamento di tutti i download?

risposta

0

È possibile nascondere il div che contiene il contenuto per il quale si sta eseguendo il precaricamento delle immagini mentre si mostra il div "di caricamento" fino al completamento del pre-caricamento. Sarebbe simile a questa:

$('#content').hide(); 
$('#loading').show(); 

// for loop loading images here 

$('#loading').hide(); 
$('#content').show(); 
+0

grazie, ma non penso di aver capito la mia domanda. il ciclo che carica le immagini fa scattare solo il download - non si blocca fino al suo completamento. – lok

2
$(function() { 
    var imgs = $('img'); 
    var length = imgs.length; 
    var loaded = 0; 
    $('img').hide().each(function() { 
     $(this).bind('load', function() { 
      if ((++loaded) === length) { 
       imgs.show(); 
      }else { 
       //show images are still downloading 
      } 
     }); 
    }); 
}); 
+0

Non c'è bisogno di un '.each()' durante il binding :) –

+0

@nick puoi spiegarlo un po 'di più, sono interessato ad apprenderlo .. Non ho lavorato con jQuery nelle ultime 3 settimane :) –

+1

'.bind()' funziona su tutti gli elementi nel set, e c'è anche una scorciatoia per la maggior parte degli eventi, come '.load()', quindi sopra lo restringeremo a questo: http: //www.jsfiddle. net/nick_craver/Uu2jz/... nota che si presume che '.src' sia impostato più tardi e che le immagini non siano già state caricate, se questo è il caso devi scorrere e controllare' .complete', attivando il 'load' evento su quelli che hanno. –

Problemi correlati