Raj
Considerar:
function doKeyDown(event) {
switch (event.keyCode) {
case 32:
/* Space bar was pressed */
if (x == 4) {
setInterval(drawAll, 20);
}
else {
setInterval(drawAll, 20);
x += dx;
}
break;
}
}
quiero llamar drawAll()
una vezno creando un círculo esa llamada drawAll
una y otra vez. ¿Debo usar un método recursivo para eso o debo usar clearInterval
?
¿Cómo puedo usar clearInterval
?
TJ Crowder
setInterval
establece un periódico Temporizador. Devuelve un identificador que puede pasar a clearInterval
para evitar que dispare:
var handle = setInterval(drawAll, 20);
// When you want to cancel it:
clearInterval(handle);
handle = 0; // I just do this so I know I've cleared the interval
En los navegadores, se garantiza que el identificador sea un número que no es igual a 0
; por lo tanto, 0
hace un valor de indicador útil para “sin temporizador establecido”. (Otras plataformas pueden devolver otros valores; las funciones de temporizador de Node.js devuelven un objeto, por ejemplo).
Para programar una función para solamente dispara una vez, usa setTimeout
en cambio. No seguirá disparando. (También devuelve un identificador que puede usar para cancelarlo a través de clearTimeout
antes de que dispare esa única vez, si corresponde.)
setTimeout(drawAll, 20);
Josué – Pendo
claroIntervalo es una opción:
var interval = setInterval(doStuff, 2000); // 2000 ms = start after 2sec
function doStuff() {
alert('this is a 2 second warning');
clearInterval(interval);
}
HynekS
Nota al margen: si desea usar funciones separadas para establecer y borrar el intervalo, la variable de intervalo debe ser accesible para todos ellos, en el alcance ‘global relativo’ o ‘un nivel superior’:
var interval = null;
function startStuff(func, time) {
interval = setInterval(func, time);
}
function stopStuff() {
clearInterval(interval);
}
PJ3
En mi caso, setInterval
devuelve un objeto Timer de Node.js. Que, cuando llamé clearInterval(timerobject)
no funcionó.
Primero tuve que obtener la identificación y llamar. claroIntervalo:
clearInterval(timerobject._id)
Usar setTimeout(drawAll, 20)
en cambio. Eso solo ejecuta la función una vez.
-
Muchas gracias, pero setTimeout está terminando el ciclo en cada punto, utilizo otro enfoque y funciona bien, function doKeyDown(event) { switch (event.keyCode) { case 32: /* Se presionó la barra espaciadora */ loop = setInterval (dibujarTodo, 20); si (x == 202) { x = 400; hilandero(); } descanso; } }
– Raj
24 de mayo de 2011 a las 10:10
-
no era la pregunta
– El Onin
15 de marzo de 2018 a las 6:05
-
Muchas gracias, pero setTimeout está terminando el ciclo en cada punto, utilizo otro enfoque y funciona bien, function doKeyDown(event) { switch (event.keyCode) { case 32: /* Se presionó la barra espaciadora */ loop = setInterval (dibujarTodo, 20); si (x == 202) { x = 400; hilandero(); } descanso; } }
– Raj
24 de mayo de 2011 a las 10:10
-
no era la pregunta
– El Onin
15 de marzo de 2018 a las 6:05