mousemove自动触发IE 9

时间:2012-09-20 04:02:42

标签: javascript jquery internet-explorer

我在IE 9中遇到问题(尚未测试8),代码应该做的是检测点击某个元素后是否拖动了鼠标。问题是IE 9自动进入$(window).mousemove事件处理程序,即使我不移动鼠标。在Chrome和FF中运行良好。

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

2 个答案:

答案 0 :(得分:3)

只有在鼠标移动了一定的最小距离后才应该开始拖动。为此,在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可能只是报告了这个动作。其他浏览器可能会等到鼠标移动整个像素。在任何情况下,如果您需要最少的移动像素数,那么您将不会遇到此问题。

答案 1 :(得分:0)

因为用激光鼠标移动鼠标的时间很短,所以我改变了一下你的方法,以便更好地适应我需要监控天气的事实,或者鼠标是否移动:

$(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事件持续发射,坐标也不会改变,除非您实际移动鼠标。我用它来弄清楚鼠标移动与否的天气。