javascript - setTimeout'u sıfırlamak
Aşağıdakilere sahibim:
window.setTimeout(function() {
window.location.href = 'file.php';
}, 115000);
.click fonksiyonu aracılığıyla, geri sayımın ortasında sayacı nasıl sıfırlayabilirim?
Cevap #1
O zamanın bir referansını saklayabilir ve ardından bu referans üzerinde clearTimeout çağırabilirsiniz.
// in the example above, assign the result
var timeoutHandle = window.setTimeout(...);
// in your click function, call clearTimeout
window.clearTimeout(timeoutHandle);
// then call setTimeout again to reset the timer
timeoutHandle = window.setTimeout(...);
Cevap #2
clearTimeout() ve bir sayı olacak setTimeout referansını besleyin. Sonra tekrar çağırın:
var initial;
function invocation() {
alert('invoked')
initial = window.setTimeout(
function() {
document.body.style.backgroundColor = 'black'
}, 5000);
}
invocation();
document.body.onclick = function() {
alert('stopped')
clearTimeout( initial )
// re-invoke invocation()
}
Bu örnekte, eğer 5 saniye içinde body öğesine tıklamazsanız arka plan rengi siyah olacaktır.
Referans:
- https://developer.mozilla.org/en/DOM/window.clearTimeout
- https://developer.mozilla.org/En/Window.setTimeout
Not: setTimeout ve clearTimeout ECMAScript'in yerel metodları değildir, ancak global window isim alanının JavaScript metodlarıdır.
Cevap #3
Zaman aşımı "Zamanlayıcı"yı hatırlamanız, iptal etmeniz ve ardından yeniden başlatmanız gerekecek:
g_timer = null;
$(document).ready(function() {
startTimer();
});
function startTimer() {
g_timer = window.setTimeout(function() {
window.location.href = 'file.php';
}, 115000);
}
function onClick() {
clearTimeout(g_timer);
startTimer();
}
Cevap #4
NodeJS için bu süper basit:
const timeout = setTimeout(...);
timeout.refresh();
Belgelerden:
timeout.refresh()
Zamanlayıcının başlangıç zamanını mevcut zamana ayarlar ve zamanlayıcının geri arama işlevini daha önce belirtilmiş süreyi mevcut zamana göre ayarlayarak çağıracak şekilde yeniden zamanlar. Bu, yeni bir JavaScript nesnesi ayırmadan bir zamanlayıcıyı yenilemek için kullanışlıdır.
Ama bu JavaScript'te çalışmaz çünkü tarayıcıda setTimeout() bir nesne değil, bir sayı döndürür.
Cevap #5
var myTimer = setTimeout(..., 115000);
something.click(function () {
clearTimeout(myTimer);
myTimer = setTimeout(..., 115000);
});
Böyle şeyler!
