2011-11-14 6 views
53

Come reimpostare un timer di intervallo impostato su 0?Javascript - Reimposta setInterval su 0

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

Ho provato clearInterval (myTimer) ma questo interrompe completamente l'intervallo. Voglio riavviare da 0.

risposta

103

Se per "restart", è significa iniziare un nuovo intervallo di 4 secondi in questo momento, quindi è necessario interrompere e riavviare il timer.

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); 

Si potrebbe anche usare un oggetto Timer poco che offre una funzione di reset:

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(); 
    } 
} 

Usage:

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(); 

demo di lavoro: https://jsfiddle.net/jfriend00/t17vz506/

+0

Bellissimo oggetto. Mi sento sempre bene quando vedo qualcuno che usa OOP in javascript! Grazie! – Fortin

8

Una volta cancellato l'intervallo utilizzando clearInterval, è possibile eseguire nuovamente setInterval. E per evitare di ripetere la richiamata esternare come una funzione separata:

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

poi:

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

poi quando si decide di riavviare:

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

ma come? clearInterval (myTimer) e quindi setInterval (myTimer, 4000) non funziona :( –

+0

@RikdeVos, perché non funziona? Inoltre non è 'setInterval (myTimer, 4000)', dovrebbe essere 'setInterval (ticker, 4000); '. –