ここでの答えを見つけることができないという簡単な質問:setTimeout
が設定されたら、それがまだ設定されているかどうかを確認する方法はありますか?
if (!Timer)
{
Timer = setTimeout(DoThis,60000);
}
私が言えることから、clearTimeout
の場合、変数は最後の値のままです。 console.log
タイムアウトが設定またはクリアされているかどうかに関係なく、Timer
が「12」であることを示しただけです。変数も無効にする必要がありますか、それとも他の変数をブール値として使用する必要がありますか、はい、このタイマーを設定しましたか?タイムアウトがまだ実行されているかどうかを確認する方法は確かにあります...どれだけの時間が残っているかを知る必要はありません、それがまだ動作している場合だけです。
私がやることは:
var timer = null;
if (timer != null) {
window.clearTimeout(timer);
timer = null;
}
else {
timer = window.setTimeout(yourFunction, 0);
}
既存のタイマーを確認する必要はありません。タイマーを開始する前に、Timoutをクリアするだけです。
var timer;
var startTimer = function() {
clearTimout(timer);
timer = setTimeout(DoThis, 6000);
}
これにより、新しいインスタンスを開始する前にタイマーがクリアされます。
別の変数Timer_Started = true
をタイマーで設定します。また、タイマー関数が呼び出されたときに変数をfalse
に変更します。
// set 'Timer_Started' when you setTimeout
var Timer_Started = true;
var Timer = setTimeout(DoThis,60000);
function DoThis(){
// function DoThis actions
//note that timer is done.
Timer_Started = false;
}
function Check_If_My_Timer_Is_Done(){
if(Timer_Started){
alert("The timer must still be running.");
}else{
alert("The timer is DONE.");
}
}
私は通常、タイマーを無効にします:
var alarm = setTimeout(wakeUpOneHourLater, 3600000);
function wakeUpOneHourLater() {
alarm = null; //stop alarm after sleeping for exactly one hour
}
//...
if (!alarm) {
console.log('Oops, waked up too early...Zzz...');
}
else {
console.log('Slept for at least one hour!');
}
これはネクロポストであることは知っていますが、まだ人々はこれを探していると思います。
これは私が使用するものです:3つの変数:
t
からのミリ秒。次のターゲットのDateオブジェクトtimerSys
は実際の間隔seconds
ミリ秒のしきい値が設定されました次に、function timer
変数が1の場合、関数は変数がtrulyであるかどうかをチェックします。そうであれば、タイマーが既に実行されているかどうか、およびグローバルvars、truly、falselyでない場合、間隔をクリアしてglobal var timerSys
to false;
var t, timerSys, seconds;
function timer(s) {
if (s && typeof s === "number") {
if (typeof timerSys === "boolean" || typeof timerSys === "undefined") {
timerSys = setInterval(function() {
sys();
}, s);
t = new Date().setMilliseconds(s);
seconds = s;
}
} else {
clearInterval(timerSys);
timerSys = false;
}
return ((!timerSys) ? "0" : t)
}
function sys() {
t = new Date().setMilliseconds(seconds);
}
例I
これで、sys関数に行を追加できます:
function sys() {
t = new Date().setMilliseconds(seconds);
console.log("Next execution: " + new Date(t));
//this is also the place where you put functions & code needed to happen when interval is triggerd
}
そして実行:
timer(5000);
コンソールで5秒ごと:
//output:: Next execution: Sun May 08 2016 11:01:05 GMT+0200 (Romance (zomertijd))
例II
function sys() {
t = new Date().setMilliseconds(seconds);
console.log("Next execution: " + seconds/1000 + " seconds");
}
$(function() {
timer(5000);
});
コンソールで5秒ごと:
//output:: Next execution: 5 seconds
例III
var t, timerSys, seconds;
function timer(s) {
if (s && typeof s === "number") {
if (typeof timerSys === "boolean" || typeof timerSys === "undefined") {
timerSys = setInterval(function() {
sys();
}, s);
t = new Date().setMilliseconds(s);
seconds = s;
}
} else {
clearInterval(timerSys);
timerSys = false;
}
return ((!timerSys) ? "0" : t)
}
function sys() {
t = new Date().setMilliseconds(seconds);
console.log("Next execution: " + seconds / 1000 + " seconds");
}
$(function() {
timer(5000);
$("button").on("click", function() {
$("span").text(t - new Date());
})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Freebeer</button>
<span></span>
この方法に注意してください0