Foros del Web » Programando para Internet » Javascript »

Problema con setInterval

Estas en el tema de Problema con setInterval en el foro de Javascript en Foros del Web. Buenas! Tengo 3 div´s en mi código, uno tiene su display a "block" para que se vea y los otros a "none", y quiero hacer ...
  #1 (permalink)  
Antiguo 16/04/2010, 05:27
 
Fecha de Ingreso: julio-2006
Mensajes: 206
Antigüedad: 17 años, 9 meses
Puntos: 2
Problema con setInterval

Buenas!

Tengo 3 div´s en mi código, uno tiene su display a "block" para que se vea y los otros a "none", y quiero hacer una función en js para que vaya cambiando el display de los div´s sucesivamente transcurrido un período de tiempo, el código es el siguiente:

Código PHP:
function cambiarImg( ){
//alert(i);    
if (i==0){    
document.getElementById("n1").style.display="block";
document.getElementById("n2").style.display="none";
document.getElementById("n3").style.display="none";
i++;
//alert("n1"+i);
}
if (
i==1){    
document.getElementById("n1").style.display="none";
document.getElementById("n2").style.display="block";
document.getElementById("n3").style.display="none";
i++;
//alert("n2"+i);
}
if (
i==2){    
document.getElementById("n1").style.display="none";
document.getElementById("n2").style.display="none";
document.getElementById("n3").style.display="block";
i=0;
//alert("n3"+i);
}
}
timer=setInterval("cambiarImg()"5000); 
El problema es q solo m rota bién si tengo los alert activados, sino no...es algo muy raro y no entiendo porque, en la consola de errores no me sale error js alguno.
Como podría hacer q funcione correctamente sin tener q activar los alerts??

Un saludo!
  #2 (permalink)  
Antiguo 16/04/2010, 07:03
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Problema con setInterval

Hola

Prueba así

Código Javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html>
  3. <head>
  4. <title></title>
  5. <script type="text/javascript">
  6. window.onload = function() {
  7. contador = 0;
  8. var f = function() {
  9.     document.getElementById('Menu'+contador).style.visibility = (document.getElementById('Menu'+contador).style.visibility === 'hidden') ? 'visible' : 'hidden';
  10. if(contador == 2) {contador = -1;}
  11.     document.getElementById('Menu'+parseInt(contador+1)).style.visibility = (document.getElementById('Menu'+parseInt(contador+1)).style.visibility === 'hidden') ? 'visible' : 'hidden';
  12. contador += 1;
  13. }
  14. setInterval(f, 5000);
  15. }
  16. </script>
  17. </head>
  18. <body>
  19. <div id="Menu0" style="visibility:visible;position:absolute;background:blue">Contenido 1</div>
  20. <div id="Menu1" style="visibility:hidden;position:absolute;background:red">Contenido 2</div>
  21. <div id="Menu2" style="visibility:hidden;position:absolute;background:yellow">Contenido 3</div>
  22. </body>
  23. </html>

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 16/04/2010, 07:59
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 3 meses
Puntos: 57
Respuesta: Problema con setInterval

Solo veo un error: dentro de cada IF estas incrementando el contador i. Esto hace que el siguiente IF sea verdadero y tambien entra.
Código javascript:
Ver original
  1. if (i==0) { //la primera vez si se entra aqui
  2.   ...
  3.   i++; //ahora i es igual a 1
  4. }
  5. if (i==1) { //si se entra aqui ya que i es igual a 1
  6.   ...
  7.   i++; // i = 2
  8. }
  9. if (i==2) { //si se entra porque i si es igual a 2
  10.   ..
  11.   i = 0;
  12. }

Podrias poner un return en cada IF, despues de que actualizas el valor del contador
  #4 (permalink)  
Antiguo 18/04/2010, 04:28
 
Fecha de Ingreso: julio-2006
Mensajes: 206
Antigüedad: 17 años, 9 meses
Puntos: 2
Respuesta: Problema con setInterval

Muchas gracias!! era un fallo de programación como has comentado. Me faltaban los return...

Un saludo

Etiquetas: setinterval
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 02:03.