24

我能够找到光标位置。但是我需要确定鼠标是否稳定。如果鼠标超过 1 分钟没有移动,那么我们必须提醒用户。

这怎么可能,有什么特别活动吗?(仅适用于 JavaScript 中的 IE)

4

7 回答 7

64

当鼠标在未来一分钟移动时设置超时,如果鼠标移动,则清除超时:

var timeout;
document.onmousemove = function(){
  clearTimeout(timeout);
  timeout = setTimeout(function(){alert("move your mouse");}, 60000);
}
于 2009-03-04T10:24:17.663 回答
3

这是一个一次性的功能,可以检查任何元素的移动:

function mouse (element, delay, callback) {

   // Counter Object
   element.ms = {};

   // Counter Value
   element.ms.x = 0;

   // Counter Function
   element.ms.y = function () {

      // Callback Trigger
      if ((++element.ms.x) == delay) element.ms.callback(element, element.ms);
   };

   // Counter Callback
   element.ms.callback = callback;

   // Function Toggle
   element.ms.toggle = function (state) {

      // Stop Loop
      if ([0, "off"][state]) clearInterval(element.ms.z);

      // Create Loop
      if ([1, "on"][state]) element.ms.z = setInterval(element.ms.y, 1);
   };

   // Function Disable
   element.ms.remove = function () {

      // Delete Counter Object
      element.ms = null; return delete element.ms;
   };

   // Function Trigger
   element.onmousemove = function () {

      // Reset Counter Value
      element.ms.x = -1;
   };

   // Return
   return element.ms;
};

用法: mouse(element, delay, callback)

示例: 让视频播放器在空闲和全屏时 5 秒后隐藏鼠标

let x = mouse(video, 5000, function (a) {
   if (document.webkitIsFullScreen) video.style.cursor = "none";
});

x.toggle(1); addEventListener("mousemove", function () {
   video.style.cursor = "auto";
});

聊天室AFK(45秒)(假设你有一个聊天框和一个发送消息功能):

let x = mouse(chatBox, (45e3), function (a) {
   chatBox.send({ text: chatBox.username + " is AFK.", italic: true });
});

x.toggle(1); x.addEventListener("mousemove", function () {
  chatBox.send({ text: chatBox.username + " is no longer AFK", italic: true });
});
于 2017-08-30T20:29:26.830 回答
1

有没有办法设置计时器在每次鼠标移动事件后开始递增?

如果达到一分钟,则弹出消息框,但每次鼠标移动计时器都会重置。

于 2009-03-04T10:22:12.410 回答
1

使用在 mousemove 事件上重置其值的计时器。如果计时器达到 1 分钟 --> 做点什么。

更多关于计时器的信息在这里http://www.w3schools.com/js/js_timing.asp
更多关于捕捉鼠标事件的信息在这里http://www.quirksmode.org/js/events_mouse.html

于 2009-03-04T10:22:48.977 回答
1

是的,你在 Javascript 中有一个 onmousemove 事件,所以要实现你所需要的,你只需要编写如下代码:

startTimer();
element.onmousemove = stopTimer(); //this stops and resets the timer

例如,您可以在文档正文标签上使用它。

更新:@Marius 取得了比这个更好的例子。

于 2009-03-04T10:24:38.300 回答
0

您可以使用 onmousemove 事件。在其中,clearTimeout() 和 setTimeout(your_warning, 1 分钟)。

于 2009-03-04T10:24:01.097 回答
0

您可以使用此脚本/片段来检测鼠标指针位置并“记住”它。然后使用计时器“setTimeout(...)”来检查位置,比如说每秒并记住那个时间。

如果超过一分钟并且位置没有改变,您可以提醒用户。

于 2009-03-04T10:24:08.707 回答