要在onmousedown
中使用的onmouseup
和onmousemove
无效,因为如果按钮在窗口外发布,onmouseup
只会触发一次:http://jsfiddle.net/f1nqproy/5/ < / p>
event.button
仅在Internet Explorer中返回有意义的结果。
event.buttons
仅存在于Firefox中。
那么如何处理其他浏览器?
编辑:
MouseEvent.buttons现在已经标准化,所以这个问题已经解决了:
https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons
答案 0 :(得分:0)
如果你想做一些浏览器不可知的事情,最简单的方法就是使用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);
});
----- ------ UPDATE
IE(像往常一样)做另一项工作,因此如果指针在窗口之外,你将不会得到mouseup事件。
hack是使用mouseleave事件:
//hack for IE
$( window).mouseleave (function(e){
console.log("mouseleave");
});
答案 1 :(得分:0)
可能是,问题是浏览器同时触发事件onmouseup
。每次检查时,是否在鼠标光标位于元素上时触发了事件,以及绑定了哪个事件。
所以,在你的情况下,第一个事件触发(不知道为什么),而第二个事件没有工作 - 这是正确的行为 - 而是触发了mouseleave事件。
尝试抓住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];
});