1

我在 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");
        });
4

2 回答 2

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 可能只是报告了该移动。其他浏览器可能会等到鼠标移动一个完整像素。无论如何,如果您需要最少数量的移动像素,那么您将不会遇到此问题。

于 2012-09-20T04:09:59.990 回答
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 事件不断触发,除非您实际移动鼠标,否则坐标不会改变。我用它来判断天气是否鼠标移动了。

于 2013-03-19T11:17:58.957 回答