1

此代码本质上与以下代码相似:

仅在选项卡处于活动状态时运行 setTimeout

但是,我在这里尝试完成的是在文档上的任何用户活动时重置此 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; };
});

当然我不明白如何让它在实践中发挥作用,但希望我的思维过程很清楚,我正在努力做到这一点,以便活动选项卡也能监听按键或鼠标点击(甚至可能是鼠标移动),如果是这种情况,请重置计时器。

有没有人有任何建议来完成这个?

4

2 回答 2

3

您可以在任何操作上重新启动计时器,如下所示:

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);
}
于 2013-11-07T20:50:55.150 回答
2
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();
    });

});
于 2013-11-07T21:24:21.880 回答