2017-07-07 29 views
0

我在做一個時間對象,但是我在clearInterval中遇到了一些奇怪的事情,但真的是一般的函數。相關代碼如下所示:clearInterval不是在wow和wow中發出奇怪的聲音

var timer = { 
timerStarted: false, 

startTimer: function(){ 
    var howMuchTime = parseInt($('#timer-button-number').text()); 
    var timesUpAt = Date.now() + howMuchTime*60*1000; 
    var start = new Date().getTime(); 
    var milseccount = timesUpAt - start; 

    function sectimer(){ 
    var remaining = Math.floor(milseccount - (new Date().getTime() - 
    start)); 
    if (remaining <= 0) { 
     clearInterval(x); 
    } 
    var minutes = Math.floor((remaining % (1000*60*60))/(1000*60)); 
    var seconds = Math.floor((remaining % (1000*60))/1000); 
    //display results 
    $('#timer-button-number').text(minutes + 'm ' + seconds + 's'); 
    } 

    var x = null; 
    if (!timer.timerStarted) { 
    x = setInterval(sectimer, 100); 
    timer.timerStarted = true; 
    } else if (timer.timerStarted){ 
    clearInterval(x); 
    timer.timeStarted = false; 
    console.log(timer.timeStarted); 
    } 
} 

} 

所以點擊按鈕,定時器啓動,timer.timeStarted交換機到真正的價值。但是當再次點擊該按鈕時,間隔不會被清除。 timer.timeStarted切換爲false,但當再次單擊該按鈕時,if語句的第二部分繼續執行(除clearInterval部分之外的所有部分),就好像if語句不指示間隔應該再次啓動一樣即使它從未真正停止過)。有人可以幫忙嗎?

+1

每次'startTimer所()'被稱爲'x'會是null,因爲你做了'var x = null' –

+0

如果你會檢查'x'的值,你就會知道問題是什麼。 – trincot

+0

運行它是因爲得到我的x未定義。同樣的事情,如果我把聲明移到開頭。如果我將x設置爲setInterval之外的if語句x每次都變成某些東西,但clearInterval仍然不起作用,並且第二個語句每次都運行timer.timeStated值。問題仍然沒有解決 –

回答

0

你歸零每次運行時的變量X ...

嘗試移動到開頭是這樣的:

x = null; 
var timer = { 
timerStarted: false, 

startTimer: function(){ 
var howMuchTime = parseInt($('#timer-button-number').text()); 
var timesUpAt = Date.now() + howMuchTime*60*1000; 
var start = new Date().getTime(); 
var milseccount = timesUpAt - start; 

function sectimer(){ 
var remaining = Math.floor(milseccount - (new Date().getTime() - 
start)); 
if (remaining <= 0) { 
    clearInterval(x); 
} 
var minutes = Math.floor((remaining % (1000*60*60))/(1000*60)); 
var seconds = Math.floor((remaining % (1000*60))/1000); 
//display results 
$('#timer-button-number').text(minutes + 'm ' + seconds + 's'); 
} 


if (!timer.timerStarted) { 
    x = setInterval(sectimer, 100); 
    timer.timerStarted = true; 
} else if (timer.timerStarted){ 
    clearInterval(x); 
    timer.timeStarted = false; 
    console.log(timer.timeStarted); 
} 
} 

} 
+0

沒有真正的幫助 –