检测鼠标左键是否按下

时间:2010-10-15 16:21:15

标签: javascript google-chrome key opera mouseevent

我讨厌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?

5 个答案:

答案 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 standardIE9 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。

享受它!