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事件,特别是对于必须瞄准目标的游戏。