Foros del Web » Programando para Internet » Javascript »

setTimeout no funciona

Estas en el tema de setTimeout no funciona en el foro de Javascript en Foros del Web. hola a todos, despues de tanto darle vueltas a un, posiblemente, error tonto que no logro ver, he decidido ver si doy con alguien que ...
  #1 (permalink)  
Antiguo 03/02/2009, 13:01
 
Fecha de Ingreso: marzo-2007
Mensajes: 135
Antigüedad: 17 años, 9 meses
Puntos: 0
Pregunta setTimeout no funciona

hola a todos, despues de tanto darle vueltas a un, posiblemente,
error tonto que no logro ver, he decidido ver si doy con alguien
que sepa echarme una mano en esto.

La cuestion es que esto me funciono en otro casos, al menos eso
creo, pero no se que pasa cuando:


Código:
for (var c=0 ; c < 100; c++) 
 setTimeout('setOp(' + document.getElementById('as') + ',' + c + ')' , 100);
Esto deberia ejecutar la funcion 100 veces a un intervalo de 100 ms

A cada llamada se programa la opacidad de una imagen, con lo que
como resultado da un fundido de 0 a 100.


Pero no ocurre esto, a la primera llamada se para.



En otro codigo que tengo exactamente igual, lo que hace es en
la primera llamada lo pone a 100 de opacidad.

Alguien sabe dicirme....

Gracias
  #2 (permalink)  
Antiguo 03/02/2009, 13:07
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Respuesta: setTimeout no funciona

Lo que pasa es que el código no se está ejecutando cada 100 milisegundos, sino 100 milisegundos después de haber sido asignado, lo cual ocurre tan rápido que no te permite ver el efecto, quizás la forma más simple de solucionarlo sea ejecutarlos en 100, 200, 300, 400... multiplicando 100 por el contador del bucle.

Creo recordar que nuestro amigo derkenuke había colocado una solución para eso, habrá que buscar el tema.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 03/02/2009, 13:19
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: setTimeout no funciona

El problema es, además de lo dicho por David El Grande, que estás modificando c.

Quiero decir, en el bucle vas aumentando c y lanzando los timeouts con la referencia a c. Lo que van a ver esos timeout no va a ser el valor de c en el momento de crear el timeout, sino en el momento de ejecutarse.

La solución a ambos problemas es fácil: No lances los timeout en un bucle sino uno después de otro:

Código javascript:
Ver original
  1. function opacidad(opac) {
  2.     opac = opac || 0;
  3.     setOp(document.getElementById('as'),opac);
  4.     if (opac<100) setTimeout(function() { opacidad(opac+1) } , 100);
  5. }
  6. // y lo lanzamos donde corresponda así:
  7. opacidad();
  #4 (permalink)  
Antiguo 03/02/2009, 13:30
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 7 meses
Puntos: 834
Respuesta: setTimeout no funciona

Otra manera:
Código PHP:
for (var c=100c++) 
    (function(
c){
     
setTimeout(function(){setOp(document.getElementById('as'),c);} , 100*c);
    })(
c); 
  #5 (permalink)  
Antiguo 03/02/2009, 14:24
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: setTimeout no funciona

Aunque correcta formalmente, le veo a esa manera dos pegas (pequeñas :) ).

La primera es que es más frágil ante interrupciones. Es decir, es más probable que si el navegador está muy ocupado y se produce algún salto, esos saltos sean mucho más violentos.

Además, así estás creando "de golpe" 100 timeouts. Esto ya en sí mismo puede ser suficiente para hacer que el navegador se estrese un poco.
  #6 (permalink)  
Antiguo 03/02/2009, 14:24
 
Fecha de Ingreso: marzo-2007
Mensajes: 135
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: setTimeout no funciona

Muchas gracias, ya esta claro.
  #7 (permalink)  
Antiguo 03/02/2009, 14:40
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 7 meses
Puntos: 834
Respuesta: setTimeout no funciona

Cita:
Iniciado por venkman Ver Mensaje
Aunque correcta formalmente, le veo a esa manera dos pegas (pequeñas :) ).

La primera es que es más frágil ante interrupciones. Es decir, es más probable que si el navegador está muy ocupado y se produce algún salto, esos saltos sean mucho más violentos.

Además, así estás creando "de golpe" 100 timeouts. Esto ya en sí mismo puede ser suficiente para hacer que el navegador se estrese un poco.
Totalmente de acuerdo.
  #8 (permalink)  
Antiguo 03/02/2009, 15:38
Avatar de Dalvenjha  
Fecha de Ingreso: febrero-2008
Ubicación: $("#oficina");
Mensajes: 692
Antigüedad: 16 años, 10 meses
Puntos: 53
Respuesta: setTimeout no funciona

Ante tanta grandeza de opiniones, mejor me guado mi codiguito humilde. =$

Luis, humilde.
__________________
Mi Showcase ||

Compartiendo todo lo posible con los demás.
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:01.