重置 setTimeout

IT技术 javascript jquery
2021-01-25 12:57:18

我有以下几点:

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

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

6个回答

您可以存储对该超时的引用,然后调用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(...);
太奇怪了.clear(),超时对象本身没有。
2021-03-20 12:57:18
是的@DanO:奇怪的是 setTimeout 不返回 Timeout 对象。在 NodeJS 上下文中确实如此。
2021-04-01 12:57:18
@Cort3z 那是因为window.setTimeout返回一个数字(计时器的 ID)而不是“超时对象”。
2021-04-10 12:57:18

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

在这个例子中,如果你在 5 秒内没有点击 body 元素,背景颜色将是黑色。

参考:

注意:setTimeout 和 clearTimeout 不是 ECMAScript 原生方法,而是全局窗口命名空间的 Javascript 方法。

您必须记住超时“计时器”,取消它,然后重新启动它:

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();
}
有趣的是,此选项已被忽略。其他的好像都需要重复timer内部函数,如果多几行代码要维护两次就不那么枯燥和痛苦了……
2021-03-29 12:57:18
var myTimer = setTimeout(..., 115000);
something.click(function () {
    clearTimeout(myTimer);
    myTimer = setTimeout(..., 115000);
}); 

沿着这些路线的东西!

此计时器将在 30 秒后触发“您好”警报框。但是,每次单击重置计时器按钮时,它都会清除 timerHandle,然后再次重新设置它。一旦发射,游戏结束。

<script type="text/javascript">
    var timerHandle = setTimeout("alert('Hello')",3000);
    function resetTimer() {
        window.clearTimeout(timerHandle);
        timerHandle = setTimeout("alert('Hello')",3000);
    }
</script>

<body>
    <button onclick="resetTimer()">Reset Timer</button>
</body>