javascript - Återställning av en setTimeout


Jag har följande:

window.setTimeout(function() {
    window.location.href = 'file.php';
}, 115000);

Hur kan jag, via en .click-funktion, återställa räknaren mitt i nedräkningen?

Svar #1

Du kan lagra en referens till den timeouten och sedan kalla clearTimeout på den referensen.

// 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(...);

Svar #2

clearTimeout() och mata in referensen till setTimeout, som kommer att vara ett nummer. Anropa det sedan igen:

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()
}

I det här exemplet, om du inte klickar på body-elementet inom 5 sekunder kommer bakgrundsfärgen att bli svart.

Referens:

  • https://developer.mozilla.org/en/DOM/window.clearTimeout
  • https://developer.mozilla.org/En/Window.setTimeout

Observera: setTimeout och clearTimeout är inte ECMAScript-inbyggda metoder, utan Javascript-metoder i det globala fönsternamnområdet.

Svar #3

Du kommer att behöva komma ihåg timeouten "Timer", avbryta den och sedan starta om den:

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();
}

Svar #4

För NodeJS är det superenkelt:

const timeout = setTimeout(...);

timeout.refresh();

Från dokumentationen:

timeout.refresh()

Ställer in timerstarttiden till den aktuella tiden och schemalägger om timern för att anropa dess callback vid den tidigare angivna varaktigheten justerad till den aktuella tiden. Detta är användbart för att uppdatera en timer utan att skapa ett nytt JavaScript-objekt.

Men det kommer inte att fungera i JavaScript eftersom setTimeout() i webbläsaren returnerar ett nummer, inte ett objekt.

Svar #5

var myTimer = setTimeout(..., 115000);
something.click(function () {
    clearTimeout(myTimer);
    myTimer = setTimeout(..., 115000);
}); 

Något i den stilen!

Relaterade artiklar