2011-05-12 23 views
61
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; 
    } 
} 

Hola a todos,Cómo usar setInterval y clearInterval?

Quiero llamar drawAll() vez no crear un bucle que llaman drawAll una y otra vez , debería usar el método recursivo para que o debería utilizar clearInterval?

¿También dígame usar clearInterval? Gracias :)

Respuesta

120

setInterval establece un recurrentes temporizador. Se devuelve un identificador que puede pasar a clearInterval para que deje de cocción:

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 exploradores, el mango se garantiza que sea un número que no es igual a 0; por lo tanto, 0 proporciona un valor de indicador útil para "sin temporizador establecido". (Otras plataformas pueden devolver otros valores, funciones de temporizador de nodejs devuelven un objeto, por ejemplo.)

para programar una función para única fuego una vez, utilice setTimeout lugar. No seguirá disparando. (También devuelve un identificador que se puede utilizar para cancelarlo a través clearTimeout antes de que los incendios que una vez si es apropiado.)

setTimeout(drawAll, 20); 
10

Use setTimeout(drawAll, 20) en su lugar. Eso solo ejecuta la función una vez.

+0

Muchas gracias, pero setTimeout está terminando el ciclo en cada punto, uso otro enfoque y funciona bien, función doKeyDown (evento) { interruptor (event.keyCode) { caso 32:/* Se presionó la barra espaciadora */ loop = setInterval (drawAll, 20); if (x == 202) { x = 400; spinner(); } break; } } – Raj

11

clearInterval 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); 
} 
+7

Nunca use cadenas con 'setInterval' o' setTimeout'. –

+1

quieres decir que debería eliminar las comillas que rodean doStuff()? –

+9

Sí, tanto las comillas como los parens. Simplemente: 'setInterval (doStuff);'. Pasar una cadena en 'setInterval' es una llamada implícita a' eval'. Lo mejor es pasar la función * referencia * en su lugar. –

1

Nota al margen - si desea utilizar funciones separadas para establecer & intervalo clara, la variable de intervalo tienen que ser accesibles para todos ellos, en 'relación global', o 'un nivel hacia arriba' alcance:

var interval = null;  

function startStuff(func, time) { 
    interval = setInterval(func, time); 
} 

function stopStuff() { 
    clearInterval(interval); 
} 
0

solía angular del electrón,

en mi caso setInterval, devuelve un objeto nodejs temporizador . que cuando llamé al clearInterval(timerobject) no funcionó.

que tenía que conseguir la identificación del primero y llamar a clearInterval

clearInterval(timerobject._id)

He luchado muchas horas con esto. espero que esto ayude.

Cuestiones relacionadas