Javascript mousemove是自动触发的IE 9
我在IE9中遇到了一个问题(还没有测试8),代码应该做的是检测鼠标在点击某个元素后是否被拖动。问题是,即使我不移动鼠标,IE9也会自动进入$(window).mousemove事件处理程序。在铬和FF中工作良好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
$(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找借口。我是说,在所有浏览器中编写拖动操作开始代码的安全方法是,在按下鼠标按钮进行特定且有意义的移动之前,不要发出拖动操作开始的信号。