这个想法很简单:我有按钮引用另一个网站。每当用户点击两个以上的链接时,我想刷新一些内容(通过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);
});
答案 0 :(得分:1)
我认为问题在于,当您第二次点击链接时,window
将始终关注。 JS运行速度非常快。为了解决这个问题,我认为你应该做setTimeout()
并将其推迟200ms左右,让窗口时间“失去”焦点
setTimeout(function() {userOnWebsiteOrNot(); },2000);
编辑:向事件侦听器添加延迟。我不认为你可以“延迟”一个事件,只是它运行的功能。
window.addEventListener('focus', function() {
setTimeout( function() {
$('#test').html('focus');
focusedOrNot = 0;
} , 5000);
});