2

这个想法很简单:我有指向另一个网站的按钮。每当用户单击了两个以上的链接时,我都想刷新一些内容(通过 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。

$(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);
    });
4

1 回答 1

1

我认为问题在于,当您第二次单击链接时,window将始终聚焦。JS 运行得非常快。为了克服这个问题,我认为你应该做 asetTimeout()并将其延迟 200 毫秒左右,让窗口有时间“失去”焦点

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

http://jsfiddle.net/xVHgE/

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

window.addEventListener('focus', function() {
            setTimeout( function() {
                $('#test').html('focus');
                focusedOrNot = 0; 
            } , 5000);
        });
于 2013-07-18T14:35:51.757 回答