ホームページ  >  記事  >  ウェブフロントエンド  >  element_javascript スキルでの右マウス ボタン イベントを防ぐ JavaScript の方法と例

element_javascript スキルでの右マウス ボタン イベントを防ぐ JavaScript の方法と例

WBOY
WBOYオリジナル
2016-05-16 16:39:491763ブラウズ

最近小さな作業をしていたとき、要素を「右クリック」してカスタム メニューをトリガーし、カスタム メニューを通じて右クリックした項目を編集する必要がありました。これには、デフォルトの右クリック メニューをブロックする必要があります

IE および FF の要素には oncontextmenu メソッドがあります。FF では、この効果は、event.preventDefault() メソッドを通じて簡単に実現できます。 IE では、このメソッドはサポートされていません。IE では、通常、メソッドのトリガー後にデフォルトのイベントが false を返すことによってブロックされます。

通常、右クリック イベントをブロックするときは、グローバルにブロックします。つまり、現在達成したい効果は、特定の領域でのみデフォルトの右クリック イベントをブロックすることです。 、他の領域は影響を受けません。

実験の結果、IE でバインディング メソッドで false を返すと、右クリックを禁止するデフォルトの動作がドキュメント レベルで実現できることがわかりました。ただし、div などの特定の要素に関しては機能しません。

最後に、マニュアルを検索すると、IE のイベント オブジェクトに returnValue 属性があり、この属性が false に設定されている場合、デフォルトの右クリック イベントはトリガーされないことがわかりました。このようなもの:

コードをコピー コードは次のとおりです:

イベント.returnValue = false;

この文を追加するだけで、私が望む効果が得られます。完全なデモ コード:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>在某个元素上阻止鼠标右键默认事件DEMO</title>
<style>
body{font-size:12px; line-height:24px; font-family:Arial, Helvetica, sans-serif;}
#activeArea{width:300px;height:200px; background:#06C; color:#fff;}
#cstCM{ width:120px; background:#eee; border:1px solid #ccc; position:absolute; }
#cstCM ul{margin:0; padding:0;}
#cstCM ul li{ list-style:none;padding:0 10px; cursor:default;}
#cstCM ul li:hover{ background:#009; color:#fff;}
.splitTop{ border-bottom:1px solid #ccc;}
.splitBottom{border-top:1px solid #fff;}
</style>
<script>
function customContextMenu(event){
	event.preventDefault &#63; event.preventDefault():(event.returnValue = false);
	var cstCM = document.getElementById('cstCM');
	cstCM.style.left = event.clientX + 'px';
	cstCM.style.top = event.clientY + 'px';
	cstCM.style.display = 'block';
	document.onmousedown = clearCustomCM;
}
function clearCustomCM(){
	document.getElementById('cstCM').style.display = 'none';
	document.onmousedown = null;
}
</script>
</head>

<body>
<div id="cstCM" style="display:none;">
	<ul>
		<li>View</li>
		<li>Sort By</li>
		<li class="splitTop">Refresh</li>
		<li class="splitBottom">Paste</li>
		<li class="splitTop">Paste Shortcut</li>
		<li class="splitBottom">Property</li>
	</ul>
</div>
<div id="activeArea" oncontextmenu = "customContextMenu(event)">
	Custom Context Menu Area
</div>
</body>
</html>

この効果は IE6 と FF と互換性がありますが、Opera には oncontextmenu メソッドがまったくないため、このメソッドで単純に実現することはできません。これを実現するには、他の手段が必要です。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。