重置setTimeout

Jas*_*son 139 javascript jquery

我有以下内容:

window.setTimeout(function() {
    window.location.href = 'file.php';
}, 115000);
Run Code Online (Sandbox Code Playgroud)

如何通过.click功能在倒计时中途重置计数器?

bdu*_*kes 229

您可以存储对该超时的引用,然后调用clearTimeout该引用.

// 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(...);
Run Code Online (Sandbox Code Playgroud)

  • @ Cort3z那是因为`window.setTimeout`返回一个数字(计时器的ID)而不是"超时对象". (14认同)
  • 是的@DanO:奇怪的是 setTimeout 不返回 Timeout 对象。在 NodeJS 上下文中确实如此。 (3认同)
  • 太奇怪了,超时对象本身上没有`.clear()`。 (2认同)

med*_*iev 24

clearTimeout()并提供setTimeout的引用,该引用将是一个数字.然后重新调用它:

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()
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,如果您在5秒内未单击body元素,则背景颜色将为黑色.

参考:

注意:setTimeout和clearTimeout不是ECMAScript本机方法,而是全局窗口命名空间的Javascript方法.


Sta*_*nko 10

对于NodeJS来说非常简单:

const timeout = setTimeout(...);

timeout.refresh();
Run Code Online (Sandbox Code Playgroud)

来自文档:

超时.刷新()

将计时器的开始时间设置为当前时间,并重新安排计时器在调整为当前时间的先前指定持续时间调用其回调。这对于刷新计时器而不分配新的 JavaScript 对象非常有用。

但它在 JavaScript 中不起作用,因为在浏览器中setTimeout()返回的是数字,而不是对象。


Fra*_*ger 9

你必须记住超时"计时器",取消它,然后重新启动它:

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();
}
Run Code Online (Sandbox Code Playgroud)


Den*_*gan 8

var myTimer = setTimeout(..., 115000);
something.click(function () {
    clearTimeout(myTimer);
    myTimer = setTimeout(..., 115000);
}); 
Run Code Online (Sandbox Code Playgroud)

沿着那条线的东西!