我正在尝试为我的站点创建基于 Javascript 的不活动超时。控制不活动的函数非常简单;记录“初始时间”的表格值随任何事件一起重置(假设任何事件都应指示事件):
function ResetTimeout() {
document.forms.TimeoutForm.initialtime.value = (new Date().getTime()) / 1000;
}//This function is called on each event, such as an onclick
在单独的函数中,当new Date().getTime()(即此时此刻的时间)-document.forms.TimeoutForm.initialtime.value(毫秒)> 720000(12分钟)时,隐藏注销表单已提交。现在,我将这些事件绑定(bind)到 <body>
如下:
<body onclick="ResetTimeout()" onkeydown="ResetTimeout()" onscroll="ResetTimeout()">
这几乎适用于所有情况,因为我网站上的每个页面都需要垂直滚动条才能看到页面底部。屏幕上任意位置的任何鼠标或触摸板按下操作也将被捕获。但是,两个有效的离群值将用于 (a) 从不向下滚动、从不单击鼠标/触摸板或按任何键但仍以某种方式参与网站的用户和 (b) 用户(不太可能但可能)向左/向右移动鼠标但从不滚动、单击或按任何键。从技术上讲,这两个用户在网站上都是活跃的,但我的代码会认为它们不活跃。
我尝试通过绑定(bind) onmouseover
来计算这些用户或 onmousemove
事件到 <body>
, 但即使您根本不移动光标,这些事件也会持续触发。我找到了 HTML5 的 onmousewheel
,但这不适用于光学鼠标或触摸板(功能永远不会触发,因此即使您将光标移到整个屏幕上也永远不会记录事件)。
jQuery 或 Javascript 中是否有一个事件仅在用户将鼠标移动到屏幕上的任何位置(并且不会保持不动)时才被记录?也就是说,仅当 xcoord2 - xcoord1(或 ycoord 相同)在某个时间间隔内不等于零时才会触发的事件?我的直觉是这可能很复杂,可能需要代码以不同的时间间隔记录 x 或 y 坐标,然后进行比较。或者,是否有类似 onmousestop
的事件? (运动中的光标停止移动)?我阅读了有关“onwheel”的信息(单击 here ),但我需要适用于所有浏览器的内容。有什么建议么?谢谢
最佳答案
mousemove除非鼠标实际移动,否则不会触发事件
The mousemove event is fired when a pointing device (usually a mouse) is moved while over an element
很简单
var timer;
$(document).on('mousemove', function() {
clearTimeout(timer);
timer = setTimeout(function() {
logout();
}, 720000);
});
关于javascript - 对于光学鼠标和/或触摸板,是否有任何类似于 "onmousestop"的 javascript/jQuery 事件或任何等效于 "onmousewheel"的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24727394/