2011-11-14 32 views
53

Làm cách nào để đặt lại bộ đếm thời gian setInterval về 0?Javascript - Đặt lại setInterval về 0

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

Tôi đã thử clearInterval (myTimer) nhưng hoàn toàn dừng khoảng thời gian. Tôi muốn khởi động lại từ 0.

Trả lời

103

Nếu bằng cách "khởi động lại", bạn có nghĩa là để bắt đầu một khoảng thời gian 4 giây mới tại thời điểm này, sau đó bạn phải dừng lại và khởi động lại bộ hẹn giờ.

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

Bạn cũng có thể sử dụng một chút đối tượng hẹn giờ mà cung cấp một tính năng thiết lập lại:

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

Cách sử dụng:

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

bản demo làm việc: https://jsfiddle.net/jfriend00/t17vz506/

+0

Đối tượng đẹp Tôi luôn cảm thấy vui khi tôi thấy ai đó sử dụng OOP trong javascript! Cảm ơn bạn! – Fortin

8

Khi bạn xóa khoảng thời gian bằng cách sử dụng clearInterval bạn có thể setInterval một lần nữa. Và để tránh lặp lại gọi lại ra bên ngoài nó như là một chức năng riêng biệt:

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

thì:

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

sau đó khi bạn quyết định khởi động lại:

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

nhưng làm thế nào? clearInterval (myTimer) và sau đó setInterval (myTimer, 4000) không hoạt động: ( –

+0

@RikdeVos, tại sao nó không hoạt động? Ngoài ra nó không phải 'setInterval (myTimer, 4000)', nó phải là 'setInterval (ticker, 4000); '. –

Các vấn đề liên quan