Comunidad de diseño web y desarrollo en internet online

FadeIn para imagenes con JavaScript

Citar            
MensajeEscrito el 01 Abr 2008 02:16 am
Recientemente investigando sobre OOP y CSS me encontre con algunas cosillas en JavaScript q la verdad son bastante sensillas y se obtene un resultado muy agradable; una de las q mas me gusto es una funcion asociada al evento onLoad con la q podemos hacer fades a imagenes y visibles en cualquier browser.

*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

Por penHolder

Claber

4661 de clabLevel

39 tutoriales
2 articulos

Genero:Masculino   Premio_Secretos

| mdz |

firefox
Citar            
MensajeEscrito el 01 Abr 2008 02:22 am
(y) que buen tip!

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox
Citar            
MensajeEscrito el 02 Abr 2008 01:32 pm
WOW esta bueno

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

firefox
Citar            
MensajeEscrito el 02 Abr 2008 08:10 pm
Muy bueno, de hecho estoy viendo como integrarlo a un proyecto, gracias XD

Por flashreloco

Claber

1310 de clabLevel

1 tutorial
1 articulo

Genero:Masculino  

Webdesigner & Mandilon 2.0

firefox
Citar            
MensajeEscrito el 07 Abr 2008 01:15 pm
Hola,
he intentado adaptar esta técnica pero con la intención de que lo haga en todas las imagenes de la pagina previamente marcadas con un Id, no lo he conseguido, solo lo hace con la del imagen del medio.. ¿alguna idea?
gracias!



document.write("<style type='text/css'>('#thepic'+i){visibility:hidden;}</style>");
function initImage() {
//

num_celdas=3
i=1;i<=num_celdas;i++;
imageId = ('thepic'+i);
image = document.getElementById(imageId);
setOpacity(image, 0);
image.style.visibility = 'visible';
fadeIn(imageId,0);
};

<BODY>
<div id='picholder'>
<img src='oranged.jpg' alt='pic' id='thepic1' />
</div>
<div id='picholder'>
<img src='oranged.jpg' alt='pic' id='thepic2' />
</div>
<div id='picholder'>
<img src='oranged.jpg' alt='pic' id='thepic3' />
</div>
</BODY>

Por designerFreak

56 de clabLevel



 

safari
Citar            
MensajeEscrito el 07 Abr 2008 01:38 pm
jQuery :?

Por Zandy

Claber

1345 de clabLevel

5 tutoriales

Genero:Masculino   Premio_Secretos

firefox
Citar            
MensajeEscrito el 07 Abr 2008 01:44 pm
jajaj, ok gracias!
we love jQuery!
ya lo tengo en jQuery, pero tuve que desestimarlo porque al navegar por el historial las imagenes no cargan de nuevo (se quedan hidden) de todos modos solo falla en Safari..

chao!

Por designerFreak

56 de clabLevel



 

safari

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.