ここでは私のコードです:のsetIntervalとてclearInterval
window.onload = runThis;
function runThis() {
const txtMin = document.getElementsByClassName("min");
const txtSec = document.getElementsByClassName("sec");
function go() {
setInterval(countDown, 1000);
}
function countDown() {
timeNow = timeNow - 1;
timeSec = timeNow % 60; //remainder as seconds
timeMin = Math.round((timeNow/60) - (timeSec/60)); //minutes
txtMin[0].innerText =
(timeMin > 0 ?
(timeMin >= 10 ? `${timeMin}:` : `0${timeMin}:`)
: "00:");
txtSec[0].innerText =
(timeSec > 0 ?
(timeSec >= 10 ? timeSec : `0${timeSec}`)
: "00");
}
function stopIt() {
let x = setInterval(countDown, 1000);
clearInterval(x);
}
const btnStart = document.getElementsByClassName("start");
btnStart[0].addEventListener("click", go);
const btnStop = document.getElementsByClassName("stop");
btnStop[0].addEventListener("click", stopIt);
}
私はトラブルのsetIntervalとてclearIntervalを設定しようとしているが生じています。 2つのボタン:start
とstop
。 start
をクリックしてタイマーを開始すると、機能go
が実行されます。それはすべて良いです。私の問題は、タイマーを停止しようとしています。
私はstopIt()
関数の外let x = setInterval(countDown, 1000);
を置く場合は、自動的にかかわらず、私はstart
ボタンをクリックしますが、そうすることで、私はタイマーを停止できるかどうかのwindows.onload
にタイマーを開始します。
私は私がここに持っているもののようなstopIt()
関数内let x = setInterval(countDown, 1000);
を入れた場合、私はstart
ボタンをクリックすることにより、いつでもタイマーを起動することができますが、今、私はclearInterval()
を使用してタイマーを停止することはできません。
ご協力いただきまして誠にありがとうございます。前もって感謝します!
を、あなたは、この背後にあるロジックを説明することができますか? 'go'関数の外側で' var intervalID = setInterval(countDown、1000); 'を実行すると自動的に実行されるので、私は尋ねています。 'start'や' stop'をクリックするたびに置き換えられるフラグのようなものですか? – Rumba
ロジックはシンプルです。 setInterval()はそのループを識別するために使用されるIDを返します。開始すると変数 "intervalID"がマークされるので、その変数を関数の外で使用してstopIt()関数。 go interval()およびstopIt()関数が適切に動作するように制御する場合は、var intervalIDがnullであるかどうかを確認して実行(または停止)するように変更します。 –