重置setTimeout

时间:2009-09-24 16:12:12

标签: javascript jquery

我有以下内容:

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

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

10 个答案:

答案 0 :(得分:217)

您可以存储对该超时的引用,然后在该引用上调用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(...);

答案 1 :(得分:22)

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方法。

答案 2 :(得分:8)

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

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

答案 3 :(得分:7)

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

这些方面的东西!

答案 4 :(得分:2)

此计时器将在30秒后触发“Hello”警告框。但是,每次单击重置计时器按钮时,它都会清除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>

答案 5 :(得分:1)

$(function() {

    (function(){

        var pthis = this;
        this.mseg = 115000;
        this.href = 'file.php'

        this.setTimer = function() { 
            return (window.setTimeout( function() {window.location.href = this.href;}, this.mseg));
        };
        this.timer = pthis.setTimer();

        this.clear = function(ref) { clearTimeout(ref.timer); ref.setTimer(); };
        $(window.document).click( function(){pthis.clear.apply(pthis, [pthis])} );

    })();

});

答案 6 :(得分:1)

要重置计时器,您需要设置并清除计时器变量

$time_out_handle = 0;
window.clearTimeout($time_out_handle);
$time_out_handle = window.setTimeout( function(){---}, 60000 );

答案 7 :(得分:1)

对于 NodeJS,它非常简单:

const timeout = setTimeout(...);

timeout.refresh();

来自文档:

<块引用>

timeout.refresh()

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

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

答案 8 :(得分:0)

var redirectionDelay;
function startRedirectionDelay(){
    redirectionDelay = setTimeout(redirect, 115000);
}
function resetRedirectionDelay(){
    clearTimeout(redirectionDelay);
}

function redirect(){
    location.href = 'file.php';
}

// in your click >> fire those
resetRedirectionDelay();
startRedirectionDelay();

这里是http://jsfiddle.net/ppjrnd2L/

的真实例子

答案 9 :(得分:0)

我知道这是一个老话题,但是我今天想出了这个

var timer       = []; //creates a empty array called timer to store timer instances
var afterTimer = function(timerName, interval, callback){
    window.clearTimeout(timer[timerName]); //clear the named timer if exists
    timer[timerName] = window.setTimeout(function(){ //creates a new named timer 
        callback(); //executes your callback code after timer finished
    },interval); //sets the timer timer
}

然后您使用

进行调用
afterTimer('<timername>string', <interval in milliseconds>int, function(){
   your code here
});