一尘不染

JavaScript如何判断浏览器/标签页是否处于活动状态

javascript

我有一个每秒调用一次的函数,仅当当前页面位于前台时才运行,即用户没有最小化浏览器或切换到另一个选项卡。如果用户不看它,它是没有用的,并且可能占用大量CPU,因此我不想只在后台浪费时间。

有人知道如何用JavaScript讲这个吗?

注意:我使用jQuery,因此,如果您的答案使用了jQuery,那就好了:)。


阅读 1030

收藏
2020-04-25

共1个答案

一尘不染

您将使用窗口的focusblur事件:

var interval_id;
$(window).focus(function() {
    if (!interval_id)
        interval_id = setInterval(hard_work, 1000);
});

$(window).blur(function() {
    clearInterval(interval_id);
    interval_id = 0;
});

要回答“ Double Fire”的评论问题并保持在jQuery易用性之内:

$(window).on("blur focus", function(e) {
    var prevType = $(this).data("prevType");

    if (prevType != e.type) {   //  reduce double fire issues
        switch (e.type) {
            case "blur":
                // do work
                break;
            case "focus":
                // do work
                break;
        }
    }

    $(this).data("prevType", e.type);
})
2020-04-25