只有在窗口聚焦时,Javascript才会执行计时器功能?

时间:2012-05-25 22:53:42

标签: javascript jquery

假设我打开了两个单独的浏览器窗口:

function onload() {
    setTimeout("dosomething", 2000);
}

function dosomething() {
    $.ajax({
        url: "someurl",
        success: function (data) {
            document.write("Hello");
        }
    });
    setTimeout("dosomething", 2000);
}

我想这样做只有当窗口处于焦点时才会每两秒打印一次。如果窗口没有聚焦,那么计时器将基本上暂停(换句话说,计时器将停止滴答,不会调用dosomething),直到用户点击未对焦的浏览器窗口,计时器将恢复并且Hello字会继续打印,而另一个窗口会停止计时器,反之亦然。

我如何做到这一点?

2 个答案:

答案 0 :(得分:0)

var someVar = false;
window.onfocus = function() { someVar = true; };
window.onblur = function() { someVar = false; };
var time;

function timer(someVar) {
    if (someVar == true) {
        setTimeOut('time++', 1);
    }
}

function something() {
    time = 0;
    while (time <= 2000) {
        timer(someVar);
        document.getElementById('time').innerHTML = time;
    }
}

答案 1 :(得分:0)

这很棘手,取决于浏览器。

var timer;    
function onBlur() {
    timer = setTimeout("dosomething", 2000);
};
function onFocus(){
    clearTimeout(timer);
};
if (/*@cc_on!@*/false) { // check for Internet Explorer
    document.onfocusin = onFocus;
    document.onfocusout = onBlur;
} else {
    window.onfocus = onFocus;
    window.onblur = onBlur;
}