*nota: esta es una traduccion del tip original en ingles
Ahora vamos con la explicacion:
en primer lugar tendremos la imagen en un div como lo hariamos normalmente...
Código :
<div id='picholder'> <img src='oranged.jpg' alt='pic' id='thepic' /> </div>
...y en un archivo .css añadimos la imagen de cargando al div para q la muestre mientras se carga <--redundante no?
Código :
#picholder { width:450px; height:338px; background:#fff url('loader.gif') 50% 50% no-repeat; } #thepic { width:450px; height:338px; }
Bien, ahora vamos con lo divertido.
Mediante el método write del objeto document añadimos un estilo CSS a nuestro código con el que ocultaremos la imagen.
Código :
document.write("<style type='text/css'>#thepic {visibility:hidden;}</style>");
Tenemos que tener en cuenta que document.write no funciona cuando el xHTML es enviado como una aplication/xhtml+xml.
Crearemos la función nitImagen() q hara la imagen visible haciendola pasar por un filtro de opacidad (alpha) hasta llegar a mostrarla completamente.
Código :
function initImage() { // imageId = 'thepic'; image = document.getElementById(imageId); setOpacity(image, 0); image.style.visibility = 'visible'; fadeIn(imageId, 0); };
Anteriormente llamamos a una función setOpacity(), la q hemos de crear a parte para poder especificar cada navegador, y asi tener mayor reusabilidad de código.
Código :
function setOpacity(obj, opacity) { opacity = (opacity == 100) ? 99.999 : opacity; // IE/Win obj.style.filter = "alpha(opacity:"+opacity+")"; // Safari anterior a 1.2, Konqueror obj.style.KHTMLOpacity = opacity /100; // anteriores Mozilla y Firefox obj.style.MozOpacity = opacity /100; // Safari 1.2, posterior Firefox y Mozilla, CSS3 obj.style.opacity = opacity /100; }
Ahora la función antes mencionada fadeIn() q se encargará de realizar un bucle que irá incrementando de 10 en 10 la opacidad de la imagen hasta llegar al 100%
Código :
function fadeIn(objId,opacity) { // if (document.getElementById) { // obj = document.getElementById(objId); if (opacity <= 100) { // setOpacity(obj, opacity); opacity += 10; // window.setTimeout("fadeIn('"+objId+"',"+opacity+")", 100); } } }
finalmente llamamos a la primera funcion en el evento onLoad
Código :
window.onload = function() { // initImage() };
Ejemplo funcionando
descargar archivos