Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法检测鼠标移动时按下的鼠标按钮?_Javascript_Google Chrome_Chromium - Fatal编程技术网

Javascript 无法检测鼠标移动时按下的鼠标按钮?

Javascript 无法检测鼠标移动时按下的鼠标按钮?,javascript,google-chrome,chromium,Javascript,Google Chrome,Chromium,录制onmousedown和onmouseup以在onmousemove中使用不起作用,因为onmouseup仅在按钮在窗口外释放时触发一次: event.button仅在Internet Explorer中返回有意义的结果 事件按钮仅存在于Firefox中 那么如何处理其他浏览器呢 编辑: MouseeEvent.buttons现已标准化,因此此问题已得到解决: 如果你想做一些与浏览器无关的事情,最简单的方法就是使用 jQuery是一个快速、小且功能丰富的JavaScript库。它使 HTML

录制
onmousedown
onmouseup
以在
onmousemove
中使用不起作用,因为
onmouseup
仅在按钮在窗口外释放时触发一次:

event.button
仅在Internet Explorer中返回有意义的结果

事件按钮
仅存在于Firefox中

那么如何处理其他浏览器呢

编辑:
MouseeEvent.buttons现已标准化,因此此问题已得到解决:

如果你想做一些与浏览器无关的事情,最简单的方法就是使用

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

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

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

可能是,问题是浏览器会同时触发MouseUp上的事件。每次它检查事件是否在鼠标光标位于事件绑定到的元素上时触发。 因此,在您的情况下,第一个事件触发(不知道为什么),而第二个不起作用-这是正确的行为-而不是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];
});

你听说过jquery吗?使用全局处理程序进行鼠标点击?是关于鼠标不在窗口外触发的问题,还是关于
事件中的浏览器兼容性的问题。按钮
?@giammin Yes@Johan不是
窗口。onmouseup
全局@两个都坏了。所有这些都可以解决我获取鼠标按钮状态的问题。天哪,我无法测试这一点,苹果鼠标一次只允许按下一个按钮(不能同时单击左右键)!:)[在构建这样的界面之前,请考虑这一点(轨迹板用户可能无法实现)]此代码与我在文章的第一行中描述的问题完全相同,即如果在窗口外释放两个按钮,则此代码将不起作用。您复制和粘贴的注释中也描述了这一点。另外,
mouseudown
应该是
mousedown
并且在
mouseup
上,
buttonDown
的状态应该是
false
,而不是
true
@JohnWayne它不能在IE上工作,因为IE不支持它。最好的办法是使用jquery和我写的hack在InternetExplorer中很容易获得鼠标移动事件的鼠标按钮状态。它们作为第一位、第二位或第三位存储在
window.event.button
中。与Firefox和
事件按钮相同。另外,
mouseleave
mouseup
完全不同。想象一个第一人称射击手,如果必须手动重新居中鼠标才能进一步转动,那将是致命的。@JohnWayne我同意你的看法,但由于ie不支持它,你别无选择。不管怎样,我说你应该用mousedown和mouseup。在IE中,不管鼠标按钮是否真正被释放,你也应该考虑MouSeave<代码> MouSeleave<代码>。例如,您可以按下鼠标按钮,将鼠标移到窗口外,获取鼠标离开事件,再次进入窗口,释放按钮并获取其他鼠标移动事件。另外,mouseleave事件并不能很好地替代mouseup事件,特别是对于必须瞄准目标的游戏。