2011-11-14 24 views
53

¿Cómo restablezco un temporizador setInterval a 0?Javascript - Restablecer setInterval a 0

var myTimer = setInterval(function() { 
     console.log('idle'); 
}, 4000); 

He intentado con clearInterval (myTimer) pero eso detiene por completo el intervalo. Quiero que se reinicie desde 0.

Respuesta

103

Si por "reinicio", se significa comenzar un nuevo intervalo de 4 segundos en este momento, luego debe detener y reiniciar el temporizador.

function myFn() {console.log('idle');} 

var myTimer = setInterval(myFn, 4000); 

// Then, later at some future time, 
// to restart a new 4 second interval starting at this exact moment in time 
clearInterval(myTimer); 
myTimer = setInterval(myFn, 4000); 

También es posible usar un pequeño objeto temporizador que ofrece una función de restablecimiento:

function Timer(fn, t) { 
    var timerObj = setInterval(fn, t); 

    this.stop = function() { 
     if (timerObj) { 
      clearInterval(timerObj); 
      timerObj = null; 
     } 
     return this; 
    } 

    // start timer using current settings (if it's not already running) 
    this.start = function() { 
     if (!timerObj) { 
      this.stop(); 
      timerObj = setInterval(fn, t); 
     } 
     return this; 
    } 

    // start with new interval, stop current interval 
    this.reset = function(newT) { 
     t = newT; 
     return this.stop().start(); 
    } 
} 

Uso:

var timer = new Timer(function() { 
    // your function here 
}, 5000); 


// switch interval to 10 seconds 
timer.reset(10000); 

// stop the timer 
timer.stop(); 

// start the timer 
timer.start(); 

demostración de trabajo: https://jsfiddle.net/jfriend00/t17vz506/

+0

Hermoso objeto. Siempre me siento bien cuando veo a alguien usando OOP en javascript. ¡Gracias! – Fortin

8

Una vez que borre el intervalo usando clearInterval podría setInterval una vez más. Y para evitar la repetición de la devolución de llamada exterioriza como una función separada:

var ticker = function() { 
    console.log('idle'); 
}; 

a continuación:

var myTimer = window.setInterval(ticker, 4000); 

entonces cuando se decide reiniciar:

window.clearInterval(myTimer); 
myTimer = window.setInterval(ticker, 4000); 
+0

pero ¿cómo? clearInterval (myTimer) y luego setInterval (myTimer, 4000) no funciona :( –

+0

@RikdeVos, ¿por qué no funciona? Tampoco es 'setInterval (myTimer, 4000)', debe ser 'setInterval (ticker, 4000); '. –

Cuestiones relacionadas