我讨厌W3C和MS创建的鼠标按键!我想知道当我得到一个mousedown事件时是否按下了鼠标左键。
我使用此代码
// Return true if evt carries left mouse button press
function detectLeftButton(evt) {
// W3C
if (window.event == null) {
return (evt.button == 0)
}
// IE
else {
return (evt.button == 1);
}
}
但是,它在Opera和Chrome中不起作用,因为它也会出现window.event。
那我该怎么办?我有一些浏览器检测,但我们都知道它不能依赖于某些浏览器最近做的所有屏蔽。如何检测鼠标左键RELIABLY?
答案 0 :(得分:41)
更新了答案。以下将检测是否按下了左键和鼠标左键:
function detectLeftButton(evt) {
evt = evt || window.event;
if ("buttons" in evt) {
return evt.buttons == 1;
}
var button = evt.which || evt.button;
return button == 1;
}
有关在JavaScript中处理鼠标事件的更多信息,请尝试http://unixpapa.com/js/mouse.html
答案 1 :(得分:10)
现在W3C standard和IE9 in standards mode支持Gecko 15+ event.buttons
属性。
event.button属性的W3C completely stuffed,因此对于符合标准的浏览器event.button为0,但对于在标准之前创建的浏览器,event.button为1。
所以代码必须避免使用event.button
,但旧浏览器除外。以下代码应该有效:
function detectLeftButton(event) {
if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) {
return false;
} else if ('buttons' in event) {
return event.buttons === 1;
} else if ('which' in event) {
return event.which === 1;
} else {
return (event.button == 1 || event.type == 'click');
}
}
答案 2 :(得分:0)
您可以使用以下代码 -
onmouseup="if(window.event.which==1){//code for left click}
else if(window.event.which==3){//code for right click}"
答案 3 :(得分:0)
尽管event.buttons现在可以在Chrome中运行,但Safari仍然不支持它。一种解决方法是在文档或父级别使用onmousedown和onmouseup事件,如: onmousedown事件=" bMouseDown =真" onmouseup =" bMouseDown =假"
答案 4 :(得分:-1)
// 0 left, 2 right, 1 middle, other.. extra buttons, gaming mouses
var buttonsArray = [false, false, false, false, false, false, false, false, false];
var mousePressed = false;
document.onmousedown = function(e) {
buttonsArray[e.button] = true;
mousePressed = true;
};
document.onmouseup = function(e) {
buttonsArray[e.button] = false;
mousePressed = false;
};
document.oncontextmenu = function() {
return false;
}
说明:当鼠标停止时,我们将按钮数组中的按下按钮更改为true。 当鼠标启动时,我们将按下的按钮更改为false。
现在我们可以更准确地确定按下哪个按钮了,但是我们有一个右键单击问题..因为我们在浏览器中打开了一个上下文菜单,这就逃脱了我们的控制...所以,我们禁用了上下文菜单为了正确检测右键单击。如果我们不这样做,我们也必须解决左键点击......以及一个逃脱此响应的复杂功能。
为了简化操作,我们可以添加另一个变量mousePressed
并标记鼠标是否向下或向上。
在chrome上工作得很完美,我没有在其他浏览器中测试它但我猜它在Firefox和Opera中也没问题...... IE ???我不在乎IE。
享受它!