2011-01-08 11 views

risposta

90

si può fare qualcosa di simile:

// show loading image 
$('#loader_img').show(); 

// main image loaded ? 
$('#main_img').on('load', function(){ 
    // hide/remove the loading image 
    $('#loader_img').hide(); 
}); 

si assegna load evento all'immagine che spara quando l'immagine ha terminato il caricamento. Prima di ciò, è possibile mostrare l'immagine del caricatore.

+0

Ho anche usato questa tecnica e funziona davvero bene. Ricordati di gestire l'errore e di interrompere i casi ... – will

+1

@ come gestire gli errori? – Michelle

+0

@WearetheWorld aggiunge il gestore per l'evento di errore. puoi fare qualcosa come '$ (img) .load (handler) .error (handler)'. @see http://api.jquery.com/error/. –

149

Basta aggiungere un'immagine di sfondo a tutte le immagini usando i CSS:

img { 
    background: url('loading.gif') no-repeat; 
} 
+10

Funziona bene. – Swar

+0

Grazie, mi ha aiutato. –

+0

Dovrebbe essere d'aiuto nelle applicazioni ADF dove l'esclusione di javascript è non deterministica a causa del rendering parziale della pagina. Darò una prova di sicuro :-). –

11

Io uso una tecnica simile a quello che ha postato @Sarfraz, tranne che invece di elementi nascondere, ho appena manipolare la classe dell'immagine che ho' m carico.

<style type="text/css"> 
.loading { background-image: url(loading.gif); } 
.loaderror { background-image: url(loaderror.gif); } 
</style> 
... 
<img id="image" class="loading" /> 
... 
<script type="text/javascript"> 
    var img = new Image(); 
    img.onload = function() { 
     i = document.getElementById('image'); 
     i.removeAttribute('class'); 
     i.src = img.src; 
    }; 
    img.onerror = function() { 
     document.getElementById('image').setAttribute('class', 'loaderror'); 
    }; 
    img.src = 'http://path/to/image.png'; 
</script> 

Nel mio caso, a volte le immagini non vengono caricate, così ho gestire l'evento OnError per modificare la classe immagine in modo che visualizzi un'immagine di sfondo errore (piuttosto che l'icona immagine spezzata del browser).

+0

Questo è diverso - stai caricando l'immagine al di fuori del DOM della pagina e poi spostandola sull'elemento 'img' dalla cache del browser. Il metodo potrebbe non funzionare se l'immagine ha una sorta di _no caching_ header di risposta HTTP. – Edward

0

Utilizzare un costruttore javascript con un callback che si attiva quando l'immagine ha terminato il caricamento in background. L'ho usato e funziona perfettamente per me cross-browser. Ecco lo thread with the answer.

2

Invece di fare solo questo metodo citato da https://stackoverflow.com/a/4635440/3787376,

si può fare qualcosa di simile:

// show loading image 
$('#loader_img').show(); 

// main image loaded ? 
$('#main_img').on('load', function(){ 
    // hide/remove the loading image 
    $('#loader_img').hide(); 
}); 

Si assegnano load evento all'immagine che spara quando l'immagine ha carico finito . Prima di ciò, è possibile mostrare l'immagine del caricatore.

è possibile utilizzare una funzione di jQuery diversa per rendere il caricamento delle immagini svaniscono, poi essere nascosti:

// Show the loading image. 
$('#loader_img').show(); 

// When main image loads: 
$('#main_img').on('load', function(){ 
    // Fade out and hide the loading image. 
    $('#loader_img').fadeOut(100); // Time in milliseconds. 
}); 

"Una volta che l'opacità raggiunge lo 0, la proprietà di stile di visualizzazione è impostata su Nessuno. " http://api.jquery.com/fadeOut/

O non era possibile utilizzare la libreria jQuery, perché ci sono già semplici metodi JavaScript cross-browser.

Problemi correlati