2017-07-07 13 views
0

私はtimeオブジェクトを作成していますが、私のclearIntervalでは奇妙なことがありますが、実際は一般的な関数です。関連するコードは次のようになります。clearIntervalはif文で覚えていません。

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の値がtrueに切り替わります。しかし、ボタンが再びクリックされると、間隔はクリアされません。 timer.timeStartedはfalseに切り替わりますが、ボタンを再度クリックするとif文の第2部分が実行され続けます(clearInterval部分を除くすべて)。if文で間隔を再び開始する必要があるように指示されますたとえそれが実際に止まらなかったとしても)。助けてもらえますか?

+1

たび 'startTimer()は' 'X 'があることが起こっていると呼ばれています'var x = null'のためnull null –

+0

' x'の値を調べれば、問題の内容を知ることができます。 – trincot

+0

それを実行すると、私のxは未定義です。宣言を最初に移すのと同じことです。 xをsetIntervalとしてif文の外側に設定すると、xは毎回何かになりますが、clearIntervalはまだ動作せず、2番目の文は毎回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

は本当に役に立たなかった –

関連する問題