2011-11-14 156 views
53

如何將setInterval定時器重置爲0?Javascript - 將setInterval重置爲0

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

我試過clearInterval(myTimer),但是完全停止了間隔。我希望它從0重新開始。

回答

103

如果 「重新啓動」,你意味着此時啓動一個新的4秒間隔,然後您必須停止並重新啓動計時器。

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

你也可以使用一個小計時器對象,提供了一個復位功能:

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

用法:

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

工作演示:https://jsfiddle.net/jfriend00/t17vz506/

+0

美麗的對象。當我看到有人在javascript中使用OOP時,我總是感覺很好!謝謝! – Fortin

8

一旦您使用clearInterval清除間隔,您可以再次setInterval。同時爲了避免重複回調外部化作爲一個單獨的功能:

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

則:

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

然後當你決定重新啓動:

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

但如何? (myTimer,4000)不起作用:( –

+0

@RikdeVos,它爲什麼不起作用?它也不是'setInterval(myTimer,4000)',它應該是'setInterval(ticker, 4000);'。 –