我想創建一個計時器小部件,可以用幾秒鐘初始化,然後通過使用新的'秒數'進行倒計時從而在任何時候重置。到目前爲止,我有這個創建定時器罰款和倒計時。jQuery構件工廠_destroy方法
我想要做的是在_create方法內首先調用_destroy方法,以刪除已經在元素上的定時器,並且還使用window.clearInterval來停止重新添加的定時器。 this.interval在_start方法中設置,然後在_destroy方法中引用,但我認爲問題在於this.interval的範圍。
這是我到目前爲止,但我的_destroy方法似乎並沒有清除間隔,我不明白爲什麼。
$.widget('time.countdown', {
options : {
remaining : (2 * 24 * 60 * 60 * 1000),
updatefreq: 1000
},
_create : function() {
'use strict';
this._destroy();
},
_start: function() {
'use strict';
var secs = this.options.remaining;
this.interval = window.setInterval((function (elem, secs) {
return function() {
secs -= 1;
var days = Math.floor(secs/(24 * 60 * 60)),
div_hr = secs % (24 * 60 * 60),
hours = Math.floor(div_hr/(60 * 60)),
div_min = secs % (60 * 60),
minutes = Math.floor(div_min/60),
div_secs = div_min % 60,
seconds = Math.ceil(div_secs),
time_parts = {
"d": days,
"h": hours,
"m": minutes,
"s": seconds
},
tstring = '',
c;
for (c in time_parts) {
if (time_parts.hasOwnProperty(c)) {
tstring += time_parts[c] + c + ' ';
}
}
elem.html(tstring);
};
}(this.element, secs)), this.options.updatefreq);
},
_destroy: function() {
'use strict';
if (this.interval !== undefined) {
window.clearInterval(this.interval);
}
this.element.html('');
}
});
任何人都可以對此有所瞭解嗎?
您好,我以前也有到_start()方法調用中_create方法,但我不小心把它與一些檢查關於使問題更清晰的選項。 – Steven1978
你的例子使它更清晰。我對jQ小部件仍然很陌生,但這確實有幫助。我最終通過在重新初始化元素上的小部件之前調用public destroy方法來修復它。看到你的例子後我會重構它。再次感謝。 – Steven1978
不客氣!很高興幫助。我同意,開始使用widget工廠並不是那麼明顯,但有一些學習,但我相信這些工作的好處是合理的:) – rd3n