Foros del Web » Programando para Internet » Javascript »

Rotador de DIV con efecto de transicion

Estas en el tema de Rotador de DIV con efecto de transicion en el foro de Javascript en Foros del Web. Ojala alguien me pueda ayudar con este problema. Tengo 3 DIV que los hago rotar, hasta ahí todo bien, pero lo que no puedo hacer ...
  #1 (permalink)  
Antiguo 25/03/2011, 16:44
 
Fecha de Ingreso: julio-2006
Mensajes: 2
Antigüedad: 17 años, 9 meses
Puntos: 0
Rotador de DIV con efecto de transicion

Ojala alguien me pueda ayudar con este problema.
Tengo 3 DIV que los hago rotar, hasta ahí todo bien,
pero lo que no puedo hacer es lograr un efecto de transicion (fedein) entre ellos cuando rotan. Lo que quiero hacer es que cuando aparezca el siguiente DIV este venga con efecto de transparencia y que de apogo se vaya viendo hasta quedar 100% visible.
El código que tengo hasta ahora es el de la rotocion solamente y es el siguiente (solo me falta la parte de la transicion)

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Rotador de divs</title>
<script type="text/javascript">


/* Tiempo en milisegundos de rotación de contenidos */
var INTERVALO_DE_ACTUALIZACION = 1000;

/* Id de los divs a rotar */
var ID_PRIMER_DIV = "primerDiv";
var ID_SEGUNDO_DIV = "segundoDiv";
var ID_TERCER_DIV = "tercerDiv";

var ID_INTERVALO;

var div1 = document.getElementById(ID_PRIMER_DIV);
var div2 = document.getElementById(ID_SEGUNDO_DIV);
var div3 = document.getElementById(ID_TERCER_DIV);

function inicializar(){
var div1 = document.getElementById(ID_PRIMER_DIV);
var div2 = document.getElementById(ID_SEGUNDO_DIV);
var div3 = document.getElementById(ID_TERCER_DIV);

div1.style.display = "none";
div2.style.display = "block";
div3.style.display = "none";

ID_INTERVALO = setInterval(rotarDivs, INTERVALO_DE_ACTUALIZACION);
}

function rotarDivs() {
var div1 = document.getElementById(ID_PRIMER_DIV);
var div2 = document.getElementById(ID_SEGUNDO_DIV);
var div3 = document.getElementById(ID_TERCER_DIV);

if (div1.style.display != "none") {
div1.style.display = "none";
div2.style.display = "block";
div3.style.display = "none";
} else if (div2.style.display != "none") {
div1.style.display = "none";
div2.style.display = "none";
div3.style.display = "block";
} else if (div3.style.display != "none") {
div1.style.display = "block";
div2.style.display = "none";
div3.style.display = "none";

}
}
</script>
</head>

<body onload="inicializar()">
<h1>Rotador de Divs</h1>

<div id="primerDiv">DIV1 ***</div>
<div id="segundoDiv">DIV2 ***</div>
<div id="tercerDiv">DIV3 ***</div>
</body>
  #2 (permalink)  
Antiguo 25/03/2011, 19:55
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Rotador de DIV con efecto de transicion

Martin_8: debes modificar progresivamente la propiedad opacity (entre 0 que es transparente, y 1 que es opaco), del estilo de los divs según corresponda (para IE es la propiedad filter, seteando el alpha en un valor entre 0 y 100). Panino5001 escribió un genial artículo sobre cómo hacer transiciones en JavaScript.
Personalmente, también modificaría un poco otras cosas de tu código:
Código Javascript:
Ver original
  1. var rotador=function(imgs, fn)
  2. {
  3.     var i=0;
  4.     fn=fn || function(x){return x;};    // La función del efecto, tanto el dominio como la imagen deben ir de 0 a 1
  5.     var rotar=function()
  6.     {
  7.         for(var j=0; j<imgs.length; j++)
  8.         {
  9.             imgs[j].style.display='none';
  10.         }
  11.         var aparecer=function(img)
  12.         {
  13.             var start=new Date().getTime();
  14.             var tiempoTransicion=500;    // En ms
  15.             var transition=function()
  16.             {
  17.                 var now=new Date().getTime();
  18.                 var progress=(now - start) / tiempoTransicion;
  19.                 if(progress<1)
  20.                 {
  21.                     img.style.opacity=fn(progress);
  22.                     setTimeout(function(){transition();}, 20);
  23.                 }
  24.                 else
  25.                 {
  26.                     img.style.opacity=1;
  27.                 }
  28.             };
  29.         };
  30.         // %
  31.         imgs[i % imgs.length].style.display='block';
  32.         aparecer(imgs[i % imgs.length]);
  33.         i++;
  34.         setTimeout(function(){rotar();}, 2000);    // 2000 ms de tiempo de cada imagen
  35.     };
  36. };
  37. rotador([document.getElementById('div1'), document.getElementById('div2'), document.getElementById('div3')], function(x){return x * x;});
Espero que con esto tengas una base de ayuda para seguir. Cualquier cosa volvé a preguntar. ¡Suerte!

PD: no probé el código, pero supongo que debería funcionar, salvo para IE.
  #3 (permalink)  
Antiguo 25/03/2011, 21:02
 
Fecha de Ingreso: julio-2006
Mensajes: 2
Antigüedad: 17 años, 9 meses
Puntos: 0
De acuerdo Respuesta: Rotador de DIV con efecto de transicion

dggluz: Muchas gracias por tu ayuda.
Me ha servido de mucho y te lo agradezco pila

Etiquetas: efecto, rotador, transicion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:15.