无法检测在移动鼠标时按下的鼠标按钮
Can not detect mouse buttons pressed onmousemove?
录制要在onmousemove
中使用的onmousedown
和onmouseup
不起作用,因为如果在窗口外释放按钮,onmouseup
只会触发一次:http://jsfiddle.net/f1nqproy/5/
event.button
仅在Internet Explorer中返回有意义的结果。
event.buttons
仅存在于Firefox中。
那么其他浏览器该怎么办呢?
编辑:
MouseEvent.buttons现在已经标准化了,所以这个问题已经解决了:https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons
如果你想做一些与浏览器无关的事情,最简单的方法是使用jQuery
jQuery是一个快速、小型且功能丰富的JavaScript库。它使诸如HTML文档遍历和操作、事件处理等,使用一个易于使用的API,动画和Ajax更加简单跨多种浏览器。具有多功能性和扩展性,jQuery已经改变了数百万人编写JavaScript。
您可以轻松地绑定到mouseup、mousedown事件,而忘记浏览器兼容性
$( window).mouseup(function(e){
console.log("mouseup:", e.button);
});
$( window).mousedown(function(e){
console.log("mousedown:", e.button);
});
-----更新------
IE(像往常一样)做另一项工作,这样如果指针在窗口外,就不会得到mouseup事件。
黑客攻击是使用mouseleave事件:
//hack for IE
$( window).mouseleave (function(e){
console.log("mouseleave");
});
Js出价
可能是,问题是浏览器同时触发事件onmouseup
。每次检查鼠标光标在元素上时是否触发了事件,事件绑定到该元素。因此,在您的案例中,第一个事件触发(不知道为什么),而第二个事件不起作用——这是正确的行为——而是触发了mouseleave事件。
试图抓住鼠标离开:
var buttonDown = [false, false, false];
$( window).on('mouseup mouseleave', function(e){
buttonDown[e.button] = true;
console.log("Buttons up:", buttonDown);
buttonDown = [false, false, false];
});
$( window).on('mousedown', function(e){
buttonDown[e.button] = true;
console.log("Buttons down:", buttonDown);
buttonDown = [false, false, false];
});
- 如何知道鼠标按钮的当前状态(mouseup状态或mousedown状态)
- 如何使用Javascript检查当前鼠标按钮状态
- 如何在按住鼠标按钮且光标在视口外时检测鼠标离开
- jQuery UI可排序,释放鼠标按钮事件
- 有可能得到鼠标按钮4、5等吗
- 当鼠标按钮的指针尝试关闭弹出窗口时,阴影弹出框消失
- 织物.js - 在不按住鼠标按钮的情况下移动对象
- HTML5画布:如果在画布上移动鼠标时按下了鼠标按钮,则进行检测
- 检查按下了哪个鼠标按钮,如果是双击
- CSS选择器:悬停加上未按下鼠标按钮
- 按下鼠标按钮时监视鼠标坐标
- 无法检测在移动鼠标时按下的鼠标按钮
- 是鼠标按钮的单击通用
- Dart HTML-在不释放鼠标按钮的情况下更改输入范围
- 当我按住鼠标按钮移动鼠标时,Fabric.js–元素是未定义的
- 布尔函数来知道鼠标按钮的位置
- 如何在按下鼠标按钮时触发' onMouseEnter '
- 鼠标事件"mousemove"在按下和释放鼠标按钮时触发
- KineticJS:获取鼠标按钮,x和y从'点击'圆圈上的事件
- 鼠标移动回调事件没有显示哪个鼠标按钮被按下