我真搞不清楚這一點,但我敢肯定有一個解釋。我正在開發一個個人培訓webapp,我有一個計時器,每次到達00:00
時,它應該去00:10
並停止。使用此功能的定時器作品我寫道:的Javascript:功能工作有時,和其他時間只是沒有做任何事情
//timer object function
function Timer(element, callback) {
var ac, minutes, seconds, finalTimeInSeconds, displayMinutes, displaySeconds, interval = 1000,
self = this,
timeLeftToNextSecond = 1000,
running = false;
this.set = function(inputMinutes, inputSeconds) {
finalTimeInSeconds = inputMinutes * 60 + inputSeconds;
minutes = (Math.floor(finalTimeInSeconds/60));
seconds = finalTimeInSeconds % 60;
this.print();
}
this.add = function(inputMinutes, inputSeconds) {
finalTimeInSeconds += inputMinutes * 60 + inputSeconds;
finalTimeInSeconds = (finalTimeInSeconds < 0) ? 0 : finalTimeInSeconds;
minutes = (Math.floor(finalTimeInSeconds/60));
seconds = finalTimeInSeconds % 60;
this.print();
}
this.subtract = function(inputMinutes, inputSeconds) {
finalTimeInSeconds -= inputMinutes * 60 + inputSeconds;
if (finalTimeInSeconds < 0) {
callback()
}
finalTimeInSeconds = (finalTimeInSeconds < 0) ? 0 : finalTimeInSeconds;
minutes = (Math.floor(finalTimeInSeconds/60));
seconds = finalTimeInSeconds % 60;
this.print();
}
this.reset = function() {
this.set(0, 0);
}
this.print = function() {
displayMinutes = (minutes.toString().length == 1) ? "0" + minutes : minutes; //ternary operator: adds a zero to the beggining
displaySeconds = (seconds.toString().length == 1) ? "0" + seconds : seconds; //of the number if it has only one caracter.
$(element).text(displayMinutes + ":" + displaySeconds);
}
this.run = function() {
if (running == false) {
running = true;
var _f = function() {
secondStarted = new Date;
self.subtract(0, 1);
interval = 1000;
ac = setTimeout(_f, interval);
}
ac = setTimeout(_f, interval);
}
}
this.stop = function() {
if (running == true) {
running = false;
console.log(this + "(" + element + ") was stopped");
stopped = new Date;
interval = 1000 - (stopped - secondStarted);
clearTimeout(ac);
}
}
this.getTotalTimeInSeconds = function() {
return finalTimeInSeconds;
}
this.reset();
}
我所做的就是創建這樣一個計時器:
globalTimer = new Timer("#globalTimer", function() {
globalTimer.stop();
globalTimer.set(0,10);
});
然後我將它設置爲00:15
並運行它:
globalTimer.set(0,15);
globalTimer.run();
並且對於某些原因,當計時器達到零時,它將設置爲00:10
,但不會停止。事情是,在它到達00:00
之前,我可以用控制檯停下來,它完美的工作;但是當計時器變爲零時,.stop()
函數就不再起作用了。點擊here進行演示。爲什麼會發生? Timer
函數有什麼問題嗎?非常感謝。
但我希望'running'在定時器停止時爲false,否則在變量中沒有任何意義。 –
如果將運行變量設置爲true,當函數執行變量設置爲false時,停止函數()將僅運行,並且它將保持整個代碼的這種方式,這就是爲什麼在應用程序之後將其重置爲true的原因該函數中的代碼將執行,以便在函數再次達到00.00後再次調用時,if語句條件可以檢查爲true。您可以嘗試在if ie alert(running)之前提醒運行變量的值; if(...看看它的值是多少 – domii
我已檢查過您的代碼,並確定該變量不是必需的,因爲它是唯一的使用功能,但如果它的價值上的依賴就像另一個函數集(),這將僅是語義的目的,即其停止不會停止功能是相同的值設置爲運行,但在功能上是相同的。 – domii