右键单击Javascript事件吗?

2020/10/23 04:42 · javascript ·  · 0评论

右键单击Javascript事件吗?如果可以,该如何使用?

正如其他人提到的那样,可以通过常规鼠标事件(mousedown,mouseup,click)来检测鼠标右键但是,如果您在弹出右键菜单时正在寻找触发事件,那么您所寻找的位置是错误的。也可以通过键盘(在Windows和某些Linux上为shift + F10或上下文菜单键)访问右键单击/上下文菜单。在这种情况下,您正在寻找的事件是oncontextmenu

window.oncontextmenu = function ()
{
    showCustomMenu();
    return false;     // cancel default menu
}

至于鼠标事件本身,浏览器将事件属性设置为事件对象,可以从事件处理功能访问该属性:

document.body.onclick = function (e) {
    var isRightMB;
    e = e || window.event;

    if ("which" in e)  // Gecko (Firefox), WebKit (Safari/Chrome) & Opera
        isRightMB = e.which == 3; 
    else if ("button" in e)  // IE, Opera 
        isRightMB = e.button == 2; 

    alert("Right mouse button " + (isRightMB ? "" : " was not") + "clicked!");
} 

window.oncontext菜单-MDC

看看下面的jQuery代码:

$("#myId").mousedown(function(ev){
      if(ev.which == 3)
      {
            alert("Right mouse button clicked on element with id myId");
      }
});

的值为which

  • 1为左键
  • 2为中间按钮
  • 3为右键

您可以使用event window.oncontextmenu,例如:

window.oncontextmenu = function () {
  alert('Right Click')
}
<h1>Please Right Click here!</h1>

是的,尽管w3c表示可以通过click事件检测到右键单击,但是在正常的浏览器中onClick不会通过右键单击来触发。

实际上,右键单击仅触发onMouseDown,onMouseUp和onContextMenu。

因此,您可以将“ onContextMenu”视为右键单击事件。这是HTML5.0标准。

如果要检测鼠标右键,则不应使用MouseEvent.which属性,因为它是非标准的,并且浏览器之间存在很大的不兼容性。(请参见MDN),而应使用MouseEvent.button它返回一个代表给定按钮的数字:

  • 0:按下主按钮,通常是向左按钮或未初始化状态
  • 1:按下辅助按钮,通常是滚轮按钮或中间按钮(如果有)
  • 2:按下辅助按钮,通常是右键
  • 3:第四个按钮,通常是“浏览器后退”按钮
  • 4:第五个按钮,通常是“浏览器前进”按钮

MouseEvent.button 除了标准鼠标外,还可以处理更多输入类型:

按钮的配置可能与标准的“从左到右”布局不同。配置为左手使用的鼠标可能会使按钮的操作反向。一些指点设备仅具有一个按钮,并使用键盘或其他输入机制指示主要,辅助,辅助等。其他一些指示设备可能具有许多映射到不同功能和按钮值的按钮。

参考:

  1. https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/which
  2. https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/button

否,但是您可以检测“ onmousedown”事件中使用了什么鼠标按钮...,然后确定是否是“右键单击”。

以下代码使用jQueryrightclick根据默认mousedownmouseup事件生成自定义事件。它考虑了以下几点:

  • 在mouseup上触发
  • 仅当在同一元素上按下鼠标时才触发
  • 此代码尤其适用于JFX Webview(因为contextmenu未在此处触发事件)
  • 当按下键盘上的contextmenu键时,它不会触发(例如使用on('contextmenu', ...)do
$(function ()
{ // global rightclick handler - trigger custom event "rightclick"
	var mouseDownElements = [];
	$(document).on('mousedown', '*', function(event)
	{
		if (event.which == 3)
		{
			mouseDownElements.push(this);
		}
	});
	$(document).on('mouseup', '*', function(event)
	{
		if (event.which == 3 && mouseDownElements.indexOf(this) >= 0)
		{
			$(this).trigger('rightclick');
		}
	});
	$(document).on('mouseup', function()
	{
		 mouseDownElements.length = 0;
	});
    // disable contextmenu
    $(document).on('contextmenu', function(event)
	{
		 event.preventDefault();
	});
});



// Usage:
$('#testButton').on('rightclick', function(event)
{
  alert('this was a rightclick');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="testButton">Rightclick me</button>

尝试使用whichand / orbutton属性

演示

function onClick(e) {
  if (e.which === 1 || e.button === 0) {
    console.log('Left mouse button at ' + e.clientX + 'x' + e.clientY);
  }
  if (e.which === 2 || e.button === 1) {
    console.log('Middle mouse button ' + e.clientX + 'x' + e.clientY);
  }
  if (e.which === 3 || e.button === 2) {
    console.log('Right mouse button ' + e.clientX + 'x' + e.clientY);
  }
  if (e.which === 4 || e.button === 3) {
    console.log('Backward mouse button ' + e.clientX + 'x' + e.clientY);
  }
  if (e.which === 5 || e.button === 4) {
    console.log('Forward mouse button ' + e.clientX + 'x' + e.clientY);
  }
}
window.addEventListener("mousedown", onClick);

一些信息在这里

是的!

function doSomething(e) {
    var rightclick;
    if (!e) var e = window.event;
    if (e.which) rightclick = (e.which == 3);
    else if (e.button) rightclick = (e.button == 2);
    alert('Rightclick: ' + rightclick); // true or false
}

是的,oncontextmenu可能是最好的选择,但是请注意,它会在按下鼠标时触发,而单击会在按下鼠标时触发。

其他相关问题则要求双击鼠标右键-除非通过手动计时器检查,否则显然不支持该功能。您可能希望能够进行右键双击的原因之一是,是否需要/想要支持左手鼠标输入(按钮反转)。浏览器的实现似乎对我们应该如何使用可用的输入设备做出了许多假设。

完成右键单击的最简单方法是使用

 $('classx').on('contextmenu', function (event) {

 });

然而,这不是跨浏览器解决方案,浏览器不同的行为此事件特别是Firefox和IE。我会在下面为跨浏览器解决方案推荐

$('classx').on('mousedown', function (event) {
    var keycode = ( event.keyCode ? event.keyCode : event.which );
    if (keycode === 3) {
       //your right click code goes here      
    }
});

这是触发它的最简单方法,它适用于除(CefSharp Chromium等...)应用程序Web视图之外的所有浏览器。希望我的代码对您有帮助,祝您好运!

const contentToRightClick=document.querySelector("div#contentToRightClick");

//const contentToRightClick=window; //If you want to add it into the whole document

contentToRightClick.oncontextmenu=function(e){
  e=(e||window.event);
  e.preventDefault();
  console.log(e);
  
  return false; //Remove it if you want to keep the default contextmenu 
}
div#contentToRightClick{
  background-color: #eee;
  border: 1px solid rgba(0,0,0,.2);
  overflow: hidden;
  padding: 20px;
  height: 150px;
}
<div id="contentToRightClick">Right click on the box !</div>
window.oncontextmenu = function (e) {
  e.preventDefault()
  alert('Right Click')
}
<h1>Please Right Click here!</h1>

使用jQuery处理事件

$(window).on("contextmenu", function(e)
{
   alert("Right click");
})

如果您想在右键单击事件时调用该函数,则可以使用以下命令

 <html lang="en" oncontextmenu="func(); return false;">
 </html>

<script>
function func(){
alert("Yes");
}
</script>

这是和我一起工作

if (evt.xa.which == 3) 
{
    alert("Right mouse clicked");
}

To handle right click from the mouse, you can use the 'oncontextmenu' event. Below is an example:

 document.body.oncontextmenu=function(event) {
     alert(" Right click! ");
 };

the above code alerts some text when right click is pressed. If you do not want the default menu of the browser to appear, you can add
return false;
At the end of the content of the function.
Thanks.

是的,它是一个javascript mousedown事件。也有一个jQuery插件可以做到这一点

本文地址:http://javascript.askforanswer.com/youjiandanjijavascriptshijianma.html
文章标签:
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!