Обнаружение, когда мышь не движется - PullRequest
17 голосов
/ 04 марта 2009

Я могу найти позицию курсора. Но мне нужно выяснить, стабильна ли мышь. Если мышь не двигали более 1 минуты, мы должны предупредить пользователя.

Насколько это возможно, для этого есть какие-то особые события? (Только для IE в javascript)

Ответы [ 7 ]

42 голосов
/ 04 марта 2009

Установите тайм-аут, когда мышь будет перемещена на одну минуту в будущее, и, если мышь будет перемещена, сбросьте тайм-аут:

var timeout;
document.onmousemove = function(){
  clearTimeout(timeout);
  timeout = setTimeout(function(){alert("move your mouse");}, 60000);
}
1 голос
/ 04 марта 2009

Да, у вас есть событие onmousemove в Javascript, поэтому для достижения того, что вам нужно, вам просто нужно сделать код примерно так:

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

Вы можете использовать его, например, в теге тела документа.

ОБНОВЛЕНИЕ: @Marius достиг лучшего примера, чем этот.

1 голос
/ 04 марта 2009

Используйте таймер, который сбрасывает свое значение при событии mousemove. Если таймер достигает 1 минуты -> Сделайте что-нибудь.

Подробнее о таймере здесь http://www.w3schools.com/js/js_timing.asp
И больше информации о событиях catchin мыши здесь http://www.quirksmode.org/js/events_mouse.html

1 голос
/ 04 марта 2009

Нет ли способа установить таймер для начала увеличения после каждого события движения мыши?

Если доходит до минуты, то появляется окно с сообщением, но каждый раз, когда мышь перемещается, таймер сбрасывается.

0 голосов
/ 30 августа 2017

Вот одна готовая функция, которая может проверить любой элемент на движение:

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 });
});
0 голосов
/ 04 марта 2009

Вы можете использовать этот скрипт / фрагмент , чтобы определить положение указателя мыши и «запомнить» его. Затем используйте таймер "setTimeout (...)", чтобы проверить положение, скажем, каждую секунду и запомнить это время.

Если прошло более одной минуты, а позиция не изменилась, вы можете предупредить пользователя.

0 голосов
/ 04 марта 2009

Вы можете использовать событие onmousemove. Внутри него clearTimeout () и setTimeout (your_warning, 1 минута).

...