2017-11-30 10 views
0
function startTimer(duration, activity) { 
    function countdown() { 
     if ((duration - 1) > 0) { 
     duration--; 
     $("#timer").html(convertNumbers(duration)) 
     } else { 
     if (activity === "session") { 
      startBreak(); 
     } else { 
      startSession(); 
     } 
     }  
    } 

    setInterval(countdown, 1000) 
} 

function startSession() { 
    var time = parseInt(($("#session_time").text()), 10); 
    startTimer(time * 60, "session"); 
    $("#activity").html("Session"); 
} 

function startBreak() { 
    var time = parseInt(($("#break_time").text()), 10); 
    startTimer(time * 60, "break"); 
    $("#activity").html("Break"); 
} 

で使用グリッチoccuringスタートボタン:ちらつき、のsetIntervalループ

$("#start").click(function() { 
    startSession(); 
}); 

私は1秒でデクリメントする毎秒を実行するsetIntervalを使用してポモドーロ時計を作っています。 startSession()関数は時間を取得し、durationが0のときにsetBreak()を指すstartTimer()関数を呼び出します。

startSessionとstartBreakの間で切り替えるのが理想的ですが、最初のカウントダウンの後に "#timer"で設定されたテキスト(時間の残り)でフリッカーと乱数を取得します。これは、startTimer()がstartBreak()を呼び出すときにIntervalを終了しないことと関係している可能性があります。

+0

'これはInterval'を終了しないことと関係があります - あなたは正しいです、あなたは' clearInterval'を使う必要があります...間隔IDを保存する必要もあります –

答えて

1

最初の間隔を決してクリアしないので、ブレークが発生すると2つの間隔が同時に実行されます。

setIntervalは、それを再び止めるためにclearInterval()に渡すことができる間隔のIDを返します。

var timer = setInterval(function() { 
    console.log('A second has passed!'); 
}, 1000}); 

setTimeout(function() { 
    clearInterval(timer); 
    console.log('Seconds no longer passes'); 
}, 10 * 1000); 

setIntervalや詳細については、clearIntervalのマニュアルを参照してください。