Làm cách nào để đặt lại setInterval
bộ hẹn giờ về 0?
var myTimer = setInterval(function() {
console.log('idle');
}, 4000);
Tôi đã thử clearInterval(myTimer)
nhưng điều đó hoàn toàn dừng lại khoảng thời gian. Tôi muốn nó khởi động lại từ 0.
Làm cách nào để đặt lại setInterval
bộ hẹn giờ về 0?
var myTimer = setInterval(function() {
console.log('idle');
}, 4000);
Tôi đã thử clearInterval(myTimer)
nhưng điều đó hoàn toàn dừng lại khoảng thời gian. Tôi muốn nó khởi động lại từ 0.
Câu trả lời:
Nếu "khởi động lại", nghĩa là bạn bắt đầu khoảng thời gian 4 giây mới tại thời điểm này, thì bạn phải dừng và khởi động lại bộ đếm thời gian.
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 đối tượng hẹn giờ nhỏ cung cấp tính năng đặt 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 or original interval, stop current interval
this.reset = function(newT = t) {
t = newT;
return this.stop().start();
}
}
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/
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 lệnh gọi lại, hãy ngoại hóa nó như một hàm riêng biệt:
var ticker = function() {
console.log('idle');
};
sau đó:
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);
setInterval(myTimer, 4000)
, nó nên được setInterval(ticker, 4000);
.