javascript中是否有通用的window.onevent?

我正在尝试制作一个JavaScript(jQuery也很好)函数来检查用户在当前页面上处于非活动状态的时间。 我知道在JavaScript中有特定的窗口事件,如window.onloadwindow.onmousemove等。但我想知道是否有任何函数可以捕获任何事件(例如鼠标移动,按键或任何其他指示活动的事件)由用户在页面上)而不必手动设置所有这些事件监听器?

不幸的是,javascript中没有通用的window.onevent。

我已经完成了一个“心跳”脚本,就像你正在描述的那样,当用户在页面上处于活动状态时,确保会话保持活动状态,并且要监听的主要事件是mousemovekeydown / keyupscroll以及可能在窗口焦点上。

请记住,如果您使用像TinyMCE这样的富文本编辑器,它在页面上自己的iFrame中运行,那些事件可能不会被冒泡,您将需要广泛测试这些场景。

使用jQuery或Mootools等Javascript框架可以更轻松地将单个函数绑定到多个事件或触发自己的事件来触发或重置超时。

我没有发现非活动事件。

我假设JQ是公平的游戏,因为你标记它。 您可以使用一个绑定语句绑定多个事件,因此这样的事情应该起作用:

 $('body').bind('mousedown keydown mousemove', resetInactiveTimer); 

您不希望捕获所有事件,例如加载和突变事件与用户活动无关。 我不知道用于一次捕获许多事件的浏览器界面。

我会为多种目的注册多个事件处理程序。 当按键关闭或鼠标按钮关闭时,无论用户持有多长时间,用户显然都不会闲置。 我会在最后一次发布后开始计时器,在鼠标移动时重置它或滚动,并在第一次按下时清除它。

你可以创建一个CustomEvent然后调度它,就像我的例子:

 var allEvents = new CustomEvent("all", { detail: { time: new Date() }, bubbles: true, cancelable: true }); function onEvt(evt) { switch (evt.type) { case 'abort': case 'beforeunload': case 'blur': case 'change': case 'click': case 'close': case 'contextmenu': case 'devicelight': case 'devicemotion': case 'deviceorientation': case 'deviceproximity': case 'dragdrop': case 'error': case 'focus': case 'hashchange': case 'keydown': case 'keypress': case 'keyup': case 'load': case 'mousedown': case 'mousemove': case 'mouseout': case 'mouseover': case 'mouseup': case 'mozbeforepaint': case 'paint': case 'popstate': case 'reset': case 'resize': case 'scroll': case 'select': case 'submit': case 'unload': case 'userproximity': case 'pageshow': case 'pagehide': evt.currentTarget.dispatchEvent(allEvents); break; } } window.addEventListener('click', onEvt); window.addEventListener('all', function(evt) { alert('mwahahahahaha'); }); 

没有通用事件,但您可以根据Nicholas C. Zakas的Idle Timer编写自己的函数。