如何检测鼠标右键+左键点击

4

我正在制作一个游戏

当用户单击右键并按住左键后,我需要执行一些操作。

如何检测这种行为?


欢迎来到SO。请访问[帮助]以了解如何提问。提示:展示代码。我实际上认为这是https://dev59.com/GHM_5IYBdhLWcg3w1G-N的重复。 - mplungjan
6个回答

7

JSfiddle: https://jsfiddle.net/mkarajohn/pd725ch6/5/

的意思是JSfiddle网站上的一个链接,可以访问 https://jsfiddle.net/mkarajohn/pd725ch6/5/。该链接涉及IT技术方面的内容。

var rightMouseClicked = false;

function handleMouseDown(e) {
  //e.button describes the mouse button that was clicked
  // 0 is left, 1 is middle, 2 is right
  if (e.button === 2) {
    rightMouseClicked = true;
  } else if (e.button === 0) {  
    //Do something if left button was clicked and right button is still pressed
    if (rightMouseClicked) {
      console.log('hello');
      //code
    }
  }
  console.log(rightMouseClicked);
}

function handleMouseUp(e) {
  if (e.button === 2) {
    rightMouseClicked = false;
  }
  console.log(rightMouseClicked);
}

document.addEventListener('mousedown', handleMouseDown);
document.addEventListener('mouseup', handleMouseUp);
document.addEventListener('contextmenu', function(e) {
    e.preventDefault();
});

没有特别的原因,只是在某个时候添加了它们,然后忘记了它们。 - Dimitris Karagiannis
刚刚更新了答案,加入了preventDefault以防止右键单击时出现上下文菜单。 - Dimitris Karagiannis
嘿,这个好像不起作用了,你能看一下吗?http://stackoverflow.com/questions/35984682/dettect-right-click-left-click-not-working? - Harman met

2
在事件处理程序中使用 MouseEvent.buttons
<element>.addEventListener("mousedown", function(event){
    if ((event.buttons & 3) === 3){
        //Do something here
    }
}, true);

这个功能比较新,你可能需要实现备用方法来记录鼠标按钮的状态。


1
你可以尝试这个。
window.oncontextmenu = function () {
  showCustomMenu();
  return false;     // cancel default menu
}

在右键单击时,每个浏览器都有默认菜单,可用于刷新页面、打印、保存等等,但您可以尝试使用此方法,可能会阻止默认操作并添加自定义操作。如果需要帮助,请写下答案。


此事件尚未在所有地方得到支持,并且在IE中不会触发禁用元素。 - Scott Marcus

1

如果需要右键点击,请使用oncontextmenu,如果需要左键点击,请设置click,如果需要禁用它们的默认行为,则可以这样做,例如:

var left = 0,
  right = 0;

document.onclick = function() {
  console.log(++left);
  return false;
};

document.oncontextmenu = function() {
  console.log(++right);
  return false;
};


当用户释放按钮后,会生成 click 事件。作者希望在两个按钮都按住时收到通知。 - weaknespase

0

请检查下面的代码

<!doctype html>
<html lang="en">
<head>
  <input type='button' value='Click Me!!!' id='btnClick'/>
  <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>

<script>
$(document).ready(function() {
$('#btnClick').mousedown(function(event){
    switch (event.which) {
        case 1:
            alert('Left mouse button pressed');
            break;
        case 2:
            alert('Middle mouse button pressed');
            break;
        case 3:
            alert('Right mouse button pressed');
            break;
        default:
           break;
    }
});
});
</script>

</body>
</html>

更多参考请查看http://www.jquerybyexample.net/2011/04/find-which-mouse-button-clicked-using.html


0

尝试

var hold=false;

function check(e) {
  if(e.button==2) hold=true;
  if(e.button==0 && hold) console.log('action');
}

function release(e) {
  if(e.button==2) hold=false;
}

function noContext(e) { e.preventDefault(); }
.box { width: 100px; height: 100px; border: 1px solid black;}
Hold right mouse button and press left (on sqare)
<div class="box" 
     onmousedown="check(event)" 
     onmouseup="release(event)"  
     oncontextmenu="noContext(event)"
></div>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接