此代码在性质上类似于:
仅在选项卡处于活动状态时运行设置超时
但是,我在这里要完成的是,在文档上的任何用户活动上重置此 10 秒计时器。对于我的测试,我目前正在使用 keyup,但我还需要通过将鼠标移动到文档中的任何元素上等来做到这一点。
这是代码,请参阅注释代码以了解我将要进行的潜在更改,我将它们注释为,因为我发现它们不起作用:
$(function(){
//var keyed = false;
function myFunction() {
window.location.href="/backoffice/logout.jsp?forceClose=true";
}
(function() {
//Just under 15 min in milliseconds
//var time = 895000,
var time = 10000,
delta = 100,
tid;
tid = setInterval(function() {
if ( window.blurred ) { return; }
time -= delta;
//if ( keyed ) {
// time = 10000;
//}
//keyed = false;
if ( time <= 0 ) {
clearInterval(tid);
myFunction(); // time passed - do your work
}
}, delta);
})();
//window.onkeyup = function() { keyed = true; };
window.onblur = function() { window.blurred = true; };
window.onfocus = function() { window.blurred = false; };
});
当然,我不明白如何在实践中使其工作,但希望我的思维过程是清晰的,我正在尝试使活动选项卡也侦听按键或鼠标单击(甚至可能是鼠标移动),如果是这种情况,请重置计时器。
有人对此有任何建议吗?
您可以在任何操作上重新启动计时器,如下所示:
var tid = null;
function startTimeout() {
tid = setTimeout( // your code);
}
window.onkeyup = function() {
tid && clearTimeout(tid);
tid = startTimeout();
}
当使用 setTimeout 而不是 setInterval 时,您必须记住在完成后再次重新启动计时器:
function startTimeout() {
tid = setTimeout(function(){
// some code
// start timer again!
startTimeout();
}, 10000);
}
function myFunction() {
//window.location.href="/backoffice/logout.jsp?forceClose=true";
alert('hello world');
}
function listener() {
window.time = 10000,
delta = 100,
window.tid = setInterval(function() {
window.time -= delta;
console.log(window.time);
if ( time <= 0 ) {
clearInterval(window.tid);
myFunction(); // time passed - do your work
}
}, delta);
};
listener();
$(document).on('keyup keypress blur change mousemove',function(){
clearInterval(window.tid);
listener();
});
});