重置setTimeout

我有以下几点:

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

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

228183 次浏览

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

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

沿着这条线!

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

你必须记住超时“Timer”,取消它,然后重新启动它:

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


})();


});

该计时器将在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>

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

$time_out_handle = 0;
window.clearTimeout($time_out_handle);
$time_out_handle = window.setTimeout( function(){---}, 60000 );
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/到底发生了什么

我知道这是一个老帖子,但我今天想出了这个

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

对于NodeJS来说,它非常简单:

const timeout = setTimeout(...);


timeout.refresh();

从文档中可以看出:

timeout.refresh ()

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

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