Retardo en Javascript

¿Cómo se puede hacer un Delay dentro de una funcion JavaScript? Para ejecutar una sentencia o sentencias cuando pase un tiempo determinado.

La FAQ Retardo en Javascript tiene

Pertenece a la categoría:
Pregunta
¿Cómo se puede hacer un Delay dentro de una funcion JavaScript? Para ejecutar una sentencia o sentencias cuando pase un tiempo determinado.
Respuesta de Miguel Angel Alvarez
La función que debes utilizar es
window.setTimeout(expression/function, milliseconds)


En el primer parámetro tienes que indicar entre comillas la sentencia o sentencias a ejecutar. En el segundo debes indicar el tiempo a pasar en milisegundos antes de que se ejecuten.


Te paso un enlace de un taller que utiliza esta función para que te sirva como ejemplo:


http://www.desarrolloweb.com/articulos/358.php

Volver al árbol de categoríasVolver al árbol de categorías

Comentarios

Germán

28/1/2004
La solución propuesta con setTimeout es sólo cierta a medias... El problema es que el retraso no afecta al hilo de ejecución de nuestro código porque el código incluido en el setTimeout se ejecuta en segundo plano. O sea, algo como

alert ('Antes');
setTimeout ('nada ()', 5000);
alert ('Después');

producirá dos alerts seguidos, sin esperar 5 segundos entre uno y otro.

Sin embargo,

alert ('Antes');
setTimeout ("alert ('Después');", 5000);

sí producirá la salida esperada.

Y ya, rizando el rizo, este código:

1 alert ('Antes');
2 setTimeout ("alert ('Después');", 5000);
3 alert ('Después');

dará dos alerts seguidos (la línea 1 y la 3) y, a los cinco segundos, otro (línea 2).

Espero que este comentario os sea útil.

DeYoN

10/3/2004
El problema que comenta German es cierto, no detiene la ejecución de todo el programa.

Para solucionar este problema se puede hacer una función que contenga todo el programa y usar setTimeout para llamar a la función.

function miFuncion()
{
sent1;
sent2;
sent3;
sent4;
...
}
...
setTimeout("miFuncion",3000);

Saludos

Ricardo

17/8/2004
con una funcion como esta puedes hacer un perfecto retardo estilo C++, peroo, no vas a poder ejecutar ningun evento mientras se ejecute esta funcion.

function delay(milisegundos)
{
for(i=0;i<=milisegundos;i++)
{
setTimeout('return 0',1);

}
}

c354r1t0

15/6/2007
Hola.

Yo estoy tratando de cerrar una ventana emergente, tras unos segundos, pero no me resulta:

<script>
function cierra() {
window.close();
} window.setTimeout("cierra();10000")
</script>

kluster

15/12/2007
Creo que el código correcto es el siguiente, a menos a mi me funciona:

<script>
function cierra(){
window.close();
}
setTimeout("cierra()",5000)
</script>

JAVIER COBO

10/9/2009
función para hacer un retardo en javascript
function wait(nsegundos) {
objetivo = (new Date()).getTime() + 1000 * Math.abs(nsegundos);
while ( (new Date()).getTime() < objetivo );
};

// basta incluir wait(x) donde x es el número de segundos de retardo

César Ríos

23/6/2011
Muy buena explicación
Yo no encontraba como hacer un pausa en un ciclo de Javascript cuando llamaba al evento onclick(), entonces yo queria que se cargara una pagina nueva en un Div y luego despues de unos segundos 2 o 3 se cambiara por otra pagina en ese mismo div, termine solucionandolo, mandando a llamar al evento onclick() y dentro llamando a otra funcion que escribiera sobre el div deseado mando a llamar un retardo y luego el retardo llame la recarga de la otra pagina, osea:

PROBLEMA:

1.- llamar evento onlick()
2.- llamar funcion escribe sobre div
3.- llamar retardo con setTimeout()
4.- llamar funcion escribe sobre div

pero aqui seguía el hilo de la secuencia, como dice German lo ejecuta en un segundo plano, no detiene el proceso.

SOLUCION:

1.- llamar evento onlick()
2.- llamar funcion escribe sobre div
3.- llamar retardo con setTimeout()
4.- que la función setTimeout llame a la funcion que escribe sobre el Div.

Grax German por la explicación, yo no entendía el porque hasta que lo averigue con alertas jajaja y ya despues encontre tu explicación. :D

Carlos

01/7/2012
Varias formas de hacer un delay
<html>

<body>
<button onclick="test()">Test</button>
</body>

<script language="javascript">

var begin;

function test()
{
try
{
var seconds = 3;
test1();
setTimeout("alert('check')", (seconds * 500));
//wait(seconds);
//sleep(seconds);
delay(seconds, "test2");
test2();
}
catch(e)
{
if(e.number != -9999)
{
alert(e.description);
}
}
}

function test1()
{
begin = (new Date()).getTime();
alert("begin " + begin);
}

function test2()
{
var end = (new Date()).getTime();
alert("end " + end + " => " + ((end - begin) / 1000));
}

function delay(time, fnReturn)
{
var fnOnError = window.onerror;
window.onerror = function(){return false;};

setTimeout("returnDelay('" + fnReturn + "', '" + fnOnError + "')", time * 1000);
throw {"description" : "Delay stop processing",
"number" : -9999};
}

function returnDelay(fnReturn, fnOnError)
{
window.onerror = fnOnError;
eval(fnReturn + "()");
}

function sleep(time, isBegin)
{
var deep = 10;

if(isBegin == null || isBegin)
{
time *= deep;
}

if(time > 0)
{
var delay = 1000 / deep;
var begin = (new Date()).getTime();
while((new Date()).getTime() < begin + delay){void(0);}
sleep(--time, false);
}
}

function wait(time)
{
time *= 1000;
var begin = (new Date()).getTime();
while((new Date()).getTime() < begin + time){void(0);}
}

</script>

</html>

Oscar delgado

16/4/2016
funcion ayuda
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
FAQ relacionadas
Volver al árbol de categoríasVolver al árbol de categorías