Foros del Web » Programando para Internet » Javascript »

Temporizador en ciclo

Estas en el tema de Temporizador en ciclo en el foro de Javascript en Foros del Web. Chicos me dan una mano por favor Necesito que en pantalla aparezcan una secuencia de numeros de 1 a 5, necesito que entre la aparicion ...
  #1 (permalink)  
Antiguo 13/12/2012, 10:44
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 14 años
Puntos: 1
Temporizador en ciclo

Chicos me dan una mano por favor

Necesito que en pantalla aparezcan una secuencia de numeros de 1 a 5, necesito que entre la aparicion de cada numero transcura un tiempo determinado 1,2,3,.. segundos.

No logro que me funcione, siempre aparecen simultanemanete todos.

Tengo el siguiente codigo:

Código HTML:
Ver original
  1.  
  2.  
  3. </head>
  4.  
  5.  
  6. <script type="text/javascript">
  7.  
  8. var i=0;
  9.  
  10. while (i<=5) {
  11.  
  12. document.write("El número es: " + i);
  13. document.write("<br />");
  14. i=i+1;
  15.  
  16. setTimeout("", 1000);
  17.  
  18. }
  19.  
  20.  
  21. <br>
  22.  
  23. </body>
  24. </html>

Gracias
  #2 (permalink)  
Antiguo 13/12/2012, 11:04
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Temporizador en ciclo

setTimeout() no para la ejecución de código, lo que hace es evaluar el código especificado en el primer parámetro luego de transcurrido el tiempo especificado en el segundo parámetro.

Puedes leer esto: https://developer.mozilla.org/es/doc...dow.setTimeout
Luego nos comentas si tienes dudas.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 13/12/2012, 13:58
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 14 años
Puntos: 1
Respuesta: Temporizador en ciclo

David, estuve leyendo tu enlace, segun la lectura estoy empleando mal la funcion setTimeout .

En en nuevo script cambie las cosas un poco y use una funcion sleep() para retrazar el proceso, sin embargo no me trabaja bien y me salen errores de ejecucion del script.

Alguna sugerencia


Código HTML:
Ver original
  1.  
  2.  
  3. <script type="text/javascript">
  4.  
  5. function sleep(segundos)
  6.     {
  7.         var dt = new Date();
  8.         dt.setTime(dt.getTime() + segundos);
  9.         while (new Date().getTime() < dt.getTime());
  10.     }
  11.  
  12.  
  13.  
  14. function inicio() {
  15.  
  16. var i=0;
  17.  
  18. while (i<=5)
  19. {
  20. document.write("El número es: " + i);
  21. document.write("<br />");
  22. i=i+1;
  23.  
  24. sleep(4000);
  25.  
  26. }
  27. }
  28.  
  29.  
  30. </head>
  31.  
  32.  
  33. <a href="javascript:inicio()">Inicio</a>
  34.  
  35. </body>
  36. </html>

Gracias
  #4 (permalink)  
Antiguo 13/12/2012, 16:23
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Temporizador en ciclo

puedes emular setInterval() pero con setTimeout(). un galimatias, verdad?? revisa el último ejemplo
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #5 (permalink)  
Antiguo 18/12/2012, 07:22
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 14 años
Puntos: 1
Respuesta: Temporizador en ciclo

IsabelM, David, estuve revisando las funciones setInterval() y setTimeout(), con todo respeto creo que no es practico utilizarlas en mi script.

En mi script yo cree una funcion sleep() para hacer el temporizador o relay, pero no me funciona como deberia. Me prodrian decir que tengo mal en mi script por favor.

Actualmente el script funciona, pero no como debe ser, genera el siguiente mensaje ("Un script de esta página puede estar ocupado, o puede haber dejado de responder. Puede detener el script, o puede continuar para ver si el script finaliza") y se queda bloqueado

Mi script es el siguiente:

Código HTML:
Ver original
  1.  
  2.  
  3. <script type="text/javascript">
  4.  
  5. function sleep(segundos)
  6.     {
  7.         var dt = new Date();
  8.         dt.setTime(dt.getTime() + segundos);
  9.         while (new Date().getTime() < dt.getTime());
  10.    }
  11.  
  12.  
  13.  
  14. function inicio() {
  15.  
  16. var i=0;
  17.  
  18. while (i<=5)
  19. {
  20. document.write("El número es: " + i);
  21. document.write("<br />");
  22. i=i+1;
  23.  
  24. sleep(4000);
  25.  
  26. }
  27. }
  28.  
  29.  
  30. </head>
  31.  
  32.  
  33. <a href="javascript:inicio()">Inicio</a>
  34.  
  35. </body>
  36. </html>
  #6 (permalink)  
Antiguo 18/12/2012, 07:29
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Temporizador en ciclo

¿Por qué opinas que no es práctico hacerlo? De la forma en que lo estás haciendo tendrás ese problema, el while sigue ejecutándose todo el tiempo de espera y hará que el navegador intente parar el script.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 18/12/2012, 07:56
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 14 años
Puntos: 1
Respuesta: Temporizador en ciclo

David, abusando de mi ignorancia, pienso que no es practico usar estas funciones por la forma como se invocan

La funcion setTimeout() ejecuta una funcion despues de un tiempo y yo necesito algo diferente. Una funcion que detenga el script un tiempo y que luego siga corriendo.

Con lo del WHILE me quede preocupado, ¿No se supone que el javascript corre del lado del usuario?

David, lo que acabo de decir es lo que entiendo, si dije muchas tonterias disculpa mi ignorancia.
  #8 (permalink)  
Antiguo 18/12/2012, 08:29
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Temporizador en ciclo

Como tal, no existe en Javascript una función que detenga el script por un tiempo.

Sí, se ejecuta del lado del usuario, pero el navegador gasta recursos ejecutando ese while y cuando ve que tarda más tiempo del que debería mostrará el mensaje de detenerlo, a eso me refería.

Puede parecer complicado de escribir la llamada, pero no lo es tanto:
Código Javascript:
Ver original
  1. function inicio() {
  2.     function escribir(i) {
  3.         document.write("El número es: " + i);
  4.         document.write("<br />");
  5.         i++;
  6.         if (i <= 5) {
  7.             setTimeout(function() {
  8.                 escribir(i);
  9.             }, 1000);
  10.         }
  11.     }
  12.    
  13.     setTimeout(function() { escribir(0); }, 1000);
  14. }
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 18/12/2012, 08:46
Avatar de rosonator  
Fecha de Ingreso: noviembre-2012
Ubicación: Bilbao
Mensajes: 49
Antigüedad: 12 años
Puntos: 7
Respuesta: Temporizador en ciclo

Mira qué suerte, acabo de hacer algo semejante, n este caso un contador de segundos desde un punto de inicio:


Código:
var tiempoInicio;
var segundos = 0;

function inicioTiempo(){ 
  var tiempo = new Date();
  tiempoInicio = tiempo.getTime();			     
  print();
} //INICIOTIEMPO 

run () {
  tiempoActual=new Date();
  diferenciaDate = tiempoActual.getTime() - tiempoInicio;
  segundos = Math.floor(diferenciaDate /1000);

  setTimeout('print',20);

} //RUN

print () {
  ctx.fillText("Segundos: "+ segundos,0,20);
  run();
} //PRINT
Lo explico:

1º En una función inicial que solo se ejecuta 1 vez por cuenta cargas la fecha actual y la conviertes en milisegundos.

2º En una función recursiva coges otra vez la fecha actual, la conviertes de nuevo a ms. y la comparas con la fecha inicial que guardas en una variable pública.

3º En esa misma función conviertes el tiempo resultado de la operación anterior a segundos dividiendo entre 1000 y lo redondeas a la baja para tener los segundos transcurridos como resultado.

4º Haces con tus segundos lo que te salga del cucumber.

¡Un saludo!

Etiquetas: funcion, html, temporizador, ciclos
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 08:16.