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