2010-12-13 19 views
5

estoy usando javascript para cargar previamente varias imágenes con el siguiente código:¿Bloqueo de Javascript hasta que se complete la precarga de la imagen?

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

Esto funciona bien - en el quemador, puedo ver cada imagen descarga se disparó después de cada iteración.

Mi problema es que quiero bloquear hasta que se complete la descarga real. En otras palabras, quiero mostrar un diálogo de "descarga de imágenes" al usuario hasta que todas las imágenes hayan terminado de descargarse.

En este momento si simplemente muestro el cuadro de diálogo antes de que se ejecute el bucle de precarga (y elimine el diálogo después de completar el bucle) simplemente captura las solicitudes de descarga NO se completa la descarga real.

Dado que parece que la descarga real es asincrónica, ¿hay alguna manera de bloquearla hasta que se hayan completado todas las descargas?

Respuesta

0

Puede ocultar el div que tiene el contenido al que está precargando sus imágenes mientras muestra el div "cargando" hasta que se complete la precarga. Se vería algo como esto:

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

// for loop loading images here 

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

gracias, pero no pienso que usted entiende mi pregunta. el bucle que carga las imágenes solo activa la descarga, no se bloquea hasta que se completa. – 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

No hay necesidad de un '.each()' al enlazar :) –

+0

@nick ¿Puedes explicarlo un poco más, estoy interesado en aprenderlo ... No he trabajado con jQuery en las últimas 3 semanas :) –

+1

'.bind()' funciona en todos los elementos del conjunto, y también hay un atajo para la mayoría de los eventos, como '.load()', así que arriba lo reduciría a esto: http: //www.jsfiddle. net/nick_craver/Uu2jz/... tenga en cuenta que esto supone que '.src' está configurado más adelante y que las imágenes no se han cargado aún, si ese es el caso necesita pasar por bucle y verificar' .complete', disparando la 'carga' evento en los que tienen. –

Cuestiones relacionadas