dominios y alojamiento web en hostalia

Cargador universal de imágenes

22 de marzo de 2004
Valoración del artículo:
Se presenta un script para cargar imágenes a usar en la página.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
El propósito del script que puede verse/descargarse más abajo tiene como objeto utilizar un único javascript que nos sirva SIEMPRE y en cualquier página web para cargar las imágenes que se vayan a utilizar. El ya utilizado en el punto 13 de este manual es válido igualmente, pero está enfocado a las 3 imágenes concretas del ejemplo, guardadas en unas rutas/directorios concretos y que utiliza 3 variables flags que dan por sentado que sólo precargaremos esas 3 imágenes. De esto, deducimos que para adaptar ese script a nuestra Web particular habría que modificar el código sustancialmente, lo que sería bastante engorroso.

Lo que proponemos con el siguiente código es:

1. Transformar el script ya conocido para adaptarlo a un uso global.
2. Con un mínimo esfuerzo indicaremos rutas,nombres de imágenes,Variables y Aspecto de la Precarga de TODAS las imágenes.
3. El ejemplo concreto está orientado a una página web home.html, por ejemplo, que es donde se precarga todo y que al terminar nos redirige al verdadero inicio de nuestra página inicio.html, que es donde se emplearán todas las imágenes cargadas.


INICIO DE CODIGO

<HTML>
<HEAD><TITLE>Cargando Imagenes</TITLE>
<STYLE TYPE="text/css">
DIV { background-color: black; color: white; border: 2px solid red; width: 30% }
</STYLE>
<SCRIPT TYPE="text/javascript">
//Script por José.A Torres
//Majadahonda 2003

miArray = new Array ("imagenes/ElMenu_over00.jpg","imagenes/foto1.bmp","imagenes/foto2.bmp",
"imagenes/foto3.bmp","imagenes/pedazo1.jpg","imagenes/pedazo2.png",
"imagenes/pedazo3.jpg","imagenes/pedazo5.jpg","imagenes/pedazo6.png",
"imagenes/pedazo7.png","imagenes/pedazo8.jpg","imagenes/pedazo9.jpg");
document.write("IMAGENES BAJANDO A LA CACHE DE SU NAVEGADOR<BR>");
patron = new RegExp("imagenes/");

for (cont=0;cont<miArray.length;cont++) {
document.write("<DIV NAME='capa'>");
document.write("Imagen: " + miArray[cont].replace(patron,""));
document.write("<br>");
document.write("...en cola de Precarga OK<br></DIV>");

eval ("imagen" + cont + " = new Image();");
eval ("imagen" + cont + ".src = " + "\"" + miArray[cont] + "\";");

}
document.write("TODAS LAS IMAGENES YA ESTAN EN PRECARGA");

cont=0;
function pruebaCarga() {

if (eval("imagen"+cont).complete == true) {
window.defaultStatus= "Imagen"+cont+ "/" + miArray.length + " CARGADA";
cont++;

}

if (cont<miArray.length) setTimeout('pruebaCarga()',500);
else {
window.defaultStatus="Carga de imágenes TERMINADA";
window.open("inicio.html","MenuPrincipal","fullscreen=yes");
}
}
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#808AC2" onLoad="pruebaCarga();return true;">
<!-- cuerpo de la pagina -->
</BODY>
</HTML>


FIN DE CODIGO

Explicación:
En un Array metemos las rutas relativas de todas las imágenes a precargar. En este caso,se encuentran todas en la carpeta Imágenes, pero no hay problema en que estén en varias diastintas mientras se indique en el array la ruta correcta.

El script crea automáticamente las referencias a cada objeto imagen para poder tener acceso a cada objeto y a sus propiedades. La denominación automática es imagen0,imagen1,imagen2..[...]..imagen+miArray.length-1

La línea de código
patron = RegExp("imagenes/");
y más adelante:
+ miArray[cont].replace(patron,"")
son pura estética. Con ambas indicamos a document.write que de los argumentos del Array omita escribir en pantalla la subcadena: "imagenes/" para no mostrar la ruta completa, pues en ciertos casos ésta podría ser bastante larga si tenemos una ruta demasiado larga. Si las rutas fuesen por ejemplo "paginainicio/articulos/electrónica/imágenes/camaras..."
"paginainicio/articulos/electrónica/imágenes/moviles..."

podríamos asignar:
patron = RegExp("paginainicio/articulos/electrónica/imágenes/");
para omitir en cada imagen cargada esa cadena.

Lo mismo ocurre con las etiquetas <DIV> ...</DIV> se han utilizado para que el usuario mediante hojas de Estilo incrustadas o por el atributo STYLE de DIV defina cómo se van a mostrar las líneas que nos informan del progreso de carga en pantalla: colores,tamaños,fondo,bordes,etc. Otro aspecto meramente de Forma.

Finalmente, cuando el navegador lee la última etiqueta HTML se llama repetidamente a una función function pruebaCarga() que comprueba el estado de CADA imagen.Sobre los tiempo de llamada (medio segundo en el ejemplo, o 500 milisegundos) conviene no abusar poniendo valores como 1 milisegundo o en general valores más bajos de 250 o 300 pues podríamos forzar demasiado los recursos del navegador y ,según en qué casos, obtener un error de "out of memory".

Cada imagen que se detecta como cargada se reflejará en la barra de estado del navegador (esquina inferior izquierda) y el total de las que hay. Finalmente, cuando todo está cargado la página nos autoconduce con window.open a inicio.html donde ya podremos hacer libre uso de todas las imágenes.

Podemos comprobar que todo ha funcionado de una forma simple: borramos antes de nada la Caché de nuestro navegador y lo configuramos en "Actualizar la página cada vez que se visita". A continuación ejecutamos la página cargadora de imágenes. Al terminar veremos en Herramientas/Opciones de Internet/Configuración/Ver Archivos (en caso de Internet Explorer) que efectivamente las imágenes han "bajado" correctamente, pese a no advertir el clásico aviso del navegador de "Cargando imagen...", pues todo se hace en segundo plano.

Si volvemos a cargar la página una segunda vez, veremos que en la barra de Status las imágenes se cargan a una gran velocidad, pues se detecta que ya están en la caché y no hay necesidad de volver a cargarlas.

AVISO IMPORTANTE

Para probar el código es necesario "colgar" realmente las páginas en internet, o al menos que las rutas indicadas en el Array apunten a cualquier carpeta contenedora de imágenes en internet. Si probamos el ejemplo en "Local", en nuestro propio Pc, con las imágenes también en nuestro ordenador, el script parece no funcionar, pero sólo parece. Esto es así porque el Navegador no almacena las imágenes en su Caché, pues detecta que YA se encuentran en nuestro disco duro y no hay necesidad de "bajarlas". Para que el Status "Imagen4/x Cargada" se visualice en tiempo real,la ventana debe de tener el foco activo.Si al ejecutar la página la minimizamos, el script seguirá ejecutándose correctamente y precargando, pero sólo al seleccionarla otra vez veremos el nuevo Status actualizado.

Compartir en redes sociales

Comentarios
Fueron enviados 2 comentarios al artículo
1 comentario no revisado
1 comentario revisado:
Por: Coel
25/5/2005
Leí con mucho interés todo sobre el problema con la precarga de las imagenes,en el cual explican el concepto F.I.F.O(first in,first out), lo que no entiendo es ¿porque no aplicaron este concepto a los códigos que ponen de ejemplo?, es decir, ¿porque se ponen a comprobar que se haya cargado cada una de las imagenes?, si nada mas necesitan comprobar que se haya cargado la última de la cola, ya que cuando esta termina de cargarce significa que las que estaban adelante también lo hicieron..bueno eso fue lo que yo entendí con el dichoso F.I.F.O, creo que si lo hicieran disminuirían en mucho el codigo de los ejemplos y sobre todo serían mucho más simples, despúes podrían simular un bonito cargador que fuera de 0% a 100%

Manuales relacionados
Categorias relacionadas
El autor
José Alberto Torres Arroyo
Ldo en Publicidad y RR.PP
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...