如何使用javascript计时来控制鼠标停止和鼠标移动事件

How can I use javascript timing to control on mouse stop and on mouse move events

本文关键字:鼠标 移动 事件 控制 javascript 何使用      更新时间:2023-09-26

所以我在aspx页面上有一个控件(一个映射)。我想写一些javascript来加载以下设置:

  1. 当鼠标停止控制=某些代码

  2. 当鼠标移动=某些代码(但仅当移动时间超过250密耳秒时)

这可以在停止时触发代码,然后在移动时触发。。。

function setupmousemovement() {
var map1 = document.getElementById('Map_Panel');
var map = document.getElementById('Map1');
map1.onmousemove = (function() {
    var onmousestop = function() {
            //code to do on stop
    }, thread;
    return function() {
        //code to do on mouse move
        clearTimeout(thread);
        thread = setTimeout(onmousestop, 25);
    };
    })();
};

但我不知道如何在移动代码中引入延迟。我以为我受够了。。。

function setupmousemovement() {
var map1 = document.getElementById('Map_Panel');
var map = document.getElementById('Map1');
map1.onmousemove = (function() {
    var onmousestop = function() {
            //code to do on stop
            clearTimeout(thread2);
    }, thread;
    return function() {
        thread2 = setTimeout("code to do on mouse move", 250);
        clearTimeout(thread);
        thread = setTimeout(onmousestop, 25);
    };
    })();
};

但它的行为并不像我想象的那样。移动中的"螺纹2"永远不会被挡块清除。我错过了什么?

这是一个棘手的问题。一点点的修补导致了这个:

function setupmousemovement() {
  var map1 = document.getElementById('Map_Panel');
  map1.onmousemove = (function() {
    var timer,
        timer250,
        onmousestop = function() {
          // code to do on stop
          clearTimeout( timer250 ); // I'm assuming we don't want this to happen if mouse stopped
          timer = null;  // this needs to be falsy next mousemove start
        };
    return function() {
      if (!timer) {
        // code to do on start
        timer250 = setTimeout(function () { // you can replace this with whatever
          // code to do when 250 millis have passed
        }, 250 );
      }
      // we are still moving, or this is our first time here...
      clearTimeout( timer );  // remove active end timer
      timer = setTimeout( onmousestop, 25 );  // delay the stopping action another 25 millis
    };
  })();
};

代码不起作用的原因是鼠标移动时mousemove会重复触发,并且每次都会启动新的超时。