代码之家  ›  专栏  ›  技术社区  ›  Boris Hamanov

检测鼠标左键按下

  •  30
  • Boris Hamanov  · 技术社区  · 16 年前

    我讨厌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也存在于其中。

    5 回复  |  直到 16 年前
        1
  •  40
  •   Tim Down    10 年前

    更新了答案。如果只按下鼠标左键,则以下操作将检测到:

    function detectLeftButton(evt) {
        evt = evt || window.event;
        if ("buttons" in evt) {
            return evt.buttons == 1;
        }
        var button = evt.which || evt.button;
        return button == 1;
    }
    

    http://unixpapa.com/js/mouse.html

        2
  •  12
  •   robocat    8 年前

    现在有一个 W3C standard event.buttons 支持的属性 IE9 in standards mode ,和 Gecko 15+ .

    W3C completely stuffed 向上设置event.button属性,因此对于符合标准的浏览器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');
        }
    }
    
        3
  •  0
  •   Rajesh Paul    13 年前

    您可以使用以下代码-

    onmouseup="if(window.event.which==1){//code for left click}
               else if(window.event.which==3){//code for right click}"
    
        4
  •  0
  •   Igor Krupitsky    11 年前

    onmousedown=“bMouseDown=true”onmousedup=“bMouseDown=false”

        5
  •  -1
  •   Lucas Tettamanti    11 年前
    // 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。

    现在我们可以确定哪个按钮按下得更准确,但是我们有一个右键单击问题。。因为有了那个按钮,我们在浏览器上打开了一个contextmenu,这就摆脱了我们的控制。。。因此,我们禁用上下文菜单以正确检测右键单击。如果我们不这样做,我们必须解决左键点击。。。这是一个逃避这种反应的复杂问题。

    为了简化,我们可以添加另一个变量 mousePressed 当鼠标向下或向上时标记。

    好好享受吧!

    推荐文章