Nếu bạn đang tìm kiếm cái gì trang trọng hơn, bạn có thể xây dựng javascript lớp mà đóng gói các chức năng setTimeout
/clearTimeout
.
một lớp học như vậy có thể trông giống như thế này:
/** class Timer **/
var Timer = function(delayMs, callbackFunc) {
this.delayMs = delayMs;
this.callbackFunc = callbackFunc;
this.timerState = 'new';
}
Timer.prototype.start = function() {
if(this.tmr) return;
var self = this;
this.timerState = 'running';
this.tmr = setTimeout(function() { self._handleTmr(); }, this.delayMs);
}
Timer.prototype.cancel = function() {
if(! this.tmr) return;
clearTimeout(this.tmr);
this.tmr = null;
this.timerState = 'canceled';
}
Timer.prototype._handleTmr = function() {
this.tmr = null;
this.timerState = 'completed';
this.callbackFunc();
}
Tôi cũng đã bao gồm một thuộc tính timerState
mà sẽ cho phép bạn dễ dàng xác định xem bộ đếm thời gian đã "hoàn thành" hoặc "hủy".
Bạn sẽ sử dụng nó như thế này:
var t = new Timer(500, function() {
alert('timer completed');
});
t.start();
// do whatever...
// now cancel the timer if it hasn't completed yet.
t.cancel();
// maybe you do some other stuff...
// then check the timerState, and act accordingly.
//
if(t.timerState == 'canceled') {
alert("the timer was canceled!");
} else {
alert("the timer completed uneventfully.");
}
Bạn có thể mở rộng ý tưởng cơ bản giống nhau bao gồm chức năng bổ sung nếu bạn cần nó (ví dụ hẹn giờ lặp lại, start/stop/resume, vv.)
Tôi sẽ không ngạc nhiên chút nào nếu jQuery hoặc một trong các khung công tác JS khác có thứ gì đó như thế này. Bất kỳ chuyên gia jQuery biết nếu nó tồn tại hay không? – MatrixFrog
Điều này thực sự toàn diện. Cảm ơn! – lai