无法检测按下onmousemove的鼠标按钮?

时间:2014-10-02 13:56:51

标签: javascript google-chrome chromium

要在onmousedown中使用的onmouseuponmousemove无效,因为如果按钮在窗口外发布,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

2 个答案:

答案 0 :(得分:0)

如果你想做一些浏览器不可知的事情,最简单的方法就是使用jQuery

  

jQuery是一个快速,小巧且功能丰富的JavaScript库。它使   像HTML文档遍历和操作,事件处理,   使用易于使用的API,动画和Ajax更简单   横跨众多浏览器。结合多功能性和   可扩展性,jQuery改变了数百万人的方式   写JavaScript。

您可以轻松绑定到mouseupmousedown事件并忘记浏览器兼容性

$( 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");
});

JsFiddle

答案 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];
});