如何使用Javascript检测用户是否处于“空闲”状态?

8
我正在开发一个“实时”Web应用程序,每10秒向服务器发送一次AJAX请求。显然,这非常消耗带宽,我想知道是否有任何解决方案。
我的想法是检查用户是否在X秒内没有移动鼠标。我该如何实现这个功能?
4个回答

15

您可能希望监听以下事件:

鼠标移动,鼠标点击,鼠标弹起,鼠标按下,键盘按下,键盘弹起,键盘按键

设置一个定时器,在一段时间(60秒?)的闲置后触发并关闭开关。确保在ajax请求前检查您的开关。

最好是,用户保持闲置状态越长,您的ajax调用速率就指数级地降低到某个较低的值。

$(window).bind('mousemove click mouseup mousedown keydown keypress keyup submit change mouseenter scroll resize dblclick', someEvent);
var active = true,
  delay = 60000,
  timer = null;

function someEvent(e)
{
  active = true;
  if (timer) clearTimeout(timer);
  timer = setTimeout(function(t){
    active = false;
  }, delay);
}

非常喜欢你的想法。谢谢! - Daniel Sorichetti
2
@DanielS,我正在回顾一些我最早的答案(这是其中之一),看看我能做出什么样的改进,我只是在记录一下要在这个答案中添加关于去抖动的信息,因为这是合适的。 - zzzzBov
这是一篇非常有趣的文章。 - Daniel Sorichetti

5

正是我想要的。简单而有效。谢谢! - Daniel Sorichetti
1
jquery.idle 只监视鼠标移动事件。因此,如果您只是因为用户没有移动鼠标而将其标记为闲置状态,那么这应该对您有用。但是,您可能还想监视其他事件,例如键盘输入。 - pinkfloydx33
此外,这对于触摸界面不起作用,因为它们不会触发鼠标事件。 - Dancrumb

1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接