Javascript mousemove是自动触发的IE 9

Javascript mousemove是自动触发的IE 9,javascript,jquery,internet-explorer,Javascript,Jquery,Internet Explorer,我在IE9中遇到了一个问题(还没有测试8),代码应该做的是检测鼠标在点击某个元素后是否被拖动。问题是,即使我不移动鼠标,IE9也会自动进入$(window).mousemove事件处理程序。在铬和FF中工作良好 $(Element).mousedown(function() { $(window).mousemove(function() { isDragging = true; $(window).u

我在IE9中遇到了一个问题(还没有测试8),代码应该做的是检测鼠标在点击某个元素后是否被拖动。问题是,即使我不移动鼠标,IE9也会自动进入$(window).mousemove事件处理程序。在铬和FF中工作良好

   $(Element).mousedown(function() {
            $(window).mousemove(function() {
                isDragging = true;
                $(window).unbind("mousemove");
            });
        }).mouseup(function() {
            $(window).unbind("mousemove");
        });

只有在鼠标移动了一定的最小距离后,才能开始拖动。为此,请在mousedown处理程序中记录鼠标位置,然后在mousemove中,仅当鼠标移动了最小距离时才开始拖动

    $(Element).mousedown(function(e) {
        var x = e.clientX;
        var y = e.clientY;
        var minMovement = 3;
        $(window).mousemove(function(e) {
            if (Math.abs(e.clientX - x) > minMovement || Math.abs(e.clientY - y) > minMovement) {
                isDragging = true;
                $(window).unbind("mousemove");
            }
        });
    }).mouseup(function() {
        $(window).unbind("mousemove");
    });

仅供参考,一些鼠标可以记录非常非常微小的移动(屏幕上不到一个像素),因此很可能在按下鼠标后鼠标确实移动了,IE可能只是报告了该移动。其他浏览器可能会等待鼠标移动整个像素。在任何情况下,如果您需要最小数量的移动像素,则不会出现此问题。

因为使用激光鼠标时,鼠标的移动时间非常短,因此我稍微更改了您的方法,以更好地满足我的需要,即仅监测天气情况或鼠标是否移动:

$(window).mousemove(function (e) {
    var smallNo = 0;
    var x = e.clientX;
    var y = e.clientY;
    var minMovement = 1;
    if ((x - smallNo) > minMovement || (y - smallNo) > minMovement) {
        countDownTime = logoutTime;
    }
});

即使mousemove事件不断触发,坐标也不会改变,除非您实际移动鼠标。我用它来判断鼠标是否移动。

如果坐标不变,鼠标就不会移动。我拔下鼠标,只留下触控板,它仍然每隔500毫秒左右触发一次事件。IE是一个残破的烂摊子,我们这些可怜的web开发人员不得不破解它的所有愚蠢之处。不要为它找借口(@SamWatkins-我不是在为IE找借口。我是说,在所有浏览器中编写拖动操作开始代码的安全方法是,在按下鼠标按钮进行特定且有意义的移动之前,不要发出拖动操作开始的信号。