检测浏览器窗口是否处于活动状态并在窗口再次激活后启动事件[JavaScript]

时间:2013-07-18 14:29:36

标签: javascript google-chrome firefox fade

这个想法很简单:我有按钮引用另一个网站。每当用户点击两个以上的链接时,我想刷新一些内容(通过Ajax)。为了实现这一点,我需要检测我的窗口是否处于活动状态,因为我只希望在用户回到我的页面时启动该事件。

不用多说这是我的代码:

$(document).on("click", "a", function() {
        numberOfClicks += 1;
        if (numberOfClicks >= 2)
        {
            userOnWebsiteOrNot();
            numberOfClicks = 0;
        }
    });

    function userOnWebsiteOrNot()
    {
        if (focusedOrNot == 0)
        {
            $('#resultaat').hide().fadeIn(5000);
        }
    }

        window.addEventListener('focus', function() {
            document.title = 'focused';
            focusedOrNot = 0;
        });

        window.addEventListener('blur', function() {
            document.title = 'not focused';
            focusedOrNot = 1;
    });

只要用户在页面上,它就会检测到,但不知何故,总是会发生淡入淡出。 谁能解释一下我做错了什么或者给我任何想法?

由于 Yenthe

解答: 我需要一个关于三个函数的setTimeOut,因为它们会检查得太快。谢谢你帮助Romo! ;)老实说,所有的功劳归于Romo。

$(document).on("click", "a", function() {
        numberOfClicks += 1;
        if (numberOfClicks >= 2)
        {
            haallinks();
            setTimeout(function() {
                userOnWebsiteOrNot();
            }, 2000);
            numberOfClicks = 0;
        }
    });

    function userOnWebsiteOrNot()
    {
        if (focusedOrNot === 0)
        {
            $('#resultaat').hide().fadeIn(5000);
        }
        else
        {
            controlerenActiefOfNiet();
        }
    }

    function controlerenActiefOfNiet()
    {
        setTimeout(function() {
            userOnWebsiteOrNot();
        }, 2000);
    }

    window.addEventListener('focus', function() {
        setTimeout(function() {
            focusedOrNot = 0;
        }, 0);
    });


    window.addEventListener('blur', function() {
        setTimeout(function() {
            focusedOrNot = 1;
        }, 1000);
    });

1 个答案:

答案 0 :(得分:1)

我认为问题在于,当您第二次点击链接时,window将始终关注。 JS运行速度非常快。为了解决这个问题,我认为你应该做setTimeout()并将其推迟200ms左右,让窗口时间“失去”焦点

setTimeout(function() {userOnWebsiteOrNot(); },2000);

http://jsfiddle.net/xVHgE/

编辑:向事件侦听器添加延迟。我不认为你可以“延迟”一个事件,只是它运行的功能。

window.addEventListener('focus', function() {
            setTimeout( function() {
                $('#test').html('focus');
                focusedOrNot = 0; 
            } , 5000);
        });