Javascript仅在窗口处于焦点时才执行计时器函数?

标签 javascript jquery

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

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

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

我想让它仅在窗口处于焦点状态时每两秒打印一次 hello。如果窗口未获得焦点,则计时器本质上会暂停(换句话说,计时器将停止计时,不会调用执行某些操作),直到用户单击未获得焦点的浏览器窗口,计时器将恢复该窗口并Hello 单词将继续打印,而另一个窗口将停止计时器,反之亦然。

我该如何实现这个目标?

最佳答案

这是一个棘手的问题,并且取决于浏览器。

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

关于Javascript仅在窗口处于焦点时才执行计时器函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762200/

相关文章:

javascript - 显示 Excel 工作表中的表格

javascript - 如何使用react-router导航回到上一条路线?

javascript - 当用户在下拉列表中选择演讲者姓名时,只有演讲者的专业知识才会显示在下一个主题下拉列表中

jquery - 需要一个砖石插件来复制这个网格或只是 CSS?

javascript - Bootstrap Full Page Slider 自动播放不适用于超过 3 张图片

javascript - jQuery sortable 获得 2 个被交换的元素

javascript - 如何通过 Javascript 使用 Youtube Data API 注销用户

javascript - VueJS v-model 和组件之间的数据绑定(bind)

javascript - 在运行时更改 Jquery asPieProgress barcolor

jQuery - 替换标准单选按钮 click() 操作