JavaScriptを使って、contextmenuイベントを設定する方法について書いています。
contextmenuイベントを使うことで、右クリック時に何らかの処理をすることができます。
実際に動くサンプルを使いつつ、以下について書いています。
・contextmenuイベントをつける方法
・contextmenuイベントを使って右クリックを禁止する
contextmenuイベントとは?
contextmenu
イベントは、ユーザーが右クリックしたときに発生するイベントです。
このイベントを活用することで、右クリックメニューの動作をカスタマイズしたり、特定の要素で右クリックを禁止することができます。
contextmenuイベントをつける方法
oncontextmenu
属性を使う方法と、addEventListener
メソッドを使ってイベントをつけることができます。
DOMにoncontextmenuを使ってイベントをつける
oncontextmenu
属性を使ってイベントをつけてみました。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Contextmenu テスト</title>
<script>
function contextMenuTest() {
alert("右クリックしました!!");
}
</script>
</head>
<body oncontextmenu="contextMenuTest()" style="background-color: skyblue; width: 100%; height: 500px;">
テスト
</body>
</html>
HTMLの解説
body
タグに対して、oncontextmenu
属性を設定しています。
これで、body
タグ内のコンテンツをクリックすると、設定したcontextMenuTest
関数が動作します。
JavaScriptの解説
contextMenuTest
関数では、実行されるとアラートが表示されます。
動作確認
実際に動作させると、下記のように右クリックしてアラートが表示されることが確認できました。
addEventListenerを使ってイベントをつける
addEventListener
メソッドを使用することでも、同じようにイベントをつけることができます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Contextmenu テスト</title>
<script>
window.onload = () => {
const body = document.querySelector("body");
body.addEventListener('contextmenu', () => {
alert("右クリックしました!!");
});
}
</script>
</head>
<body style="background-color: skyblue; width: 100%; height: 500px;">
テスト
</body>
</html>
HTMLの解説
body
タグにたいして、イベントをつけます。
body
タグにはstyle
以外の属性がついていない状態です。
JavaScriptの解説
window.onload
で読み込み時に実行されるようにしています。
querySelector
でbody
タグを取得して、addEventListener
メソッドでイベントを追加しています。
第1引数の「’contextmenu’」でコンテキストメニューイベントが追加されます。
第2引数は実際に実行される処理を書きます。
こちらのコードも動作確認すると、先ほどと同じようにアラートが表示された後にメニューが開きます。
contextmenuイベントをつけるときの注意点
注意点として、設定した要素の範囲外をクリックしたら動作しません。
例えば、下記のようにbodyに設定して、全体に効くようにみえても
<body oncontextmenu="alert('テスト')">
テスト
</body>
コンテンツの内容が少ない場合には、コンテンツ外がクリックされて正常に動作しないことがあります。
全体につけたいときには、document
に設定すると良いかと思います。
contextmenuで右クリックを禁止する
contextmenu
イベントを使用して、右クリックを禁止する方法です。
こちらのサンプルでは、document
にcontextmenu
をつけることで、ページ全体で右クリックを禁止しています。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Contextmenu 右クリック禁止</title>
<script>
window.onload = () => {
document.addEventListener('contextmenu', (event) => {
// 右クリックを禁止
event.preventDefault();
});
}
</script>
</head>
<body>
右クリック禁止!!<br>
どこを押してもメニューが開かない
</body>
</html>
HTMLの解説
ページ全体にイベントを指定します。
body
タグには、文章を書いているだけです。
JavaScriptの解説
window.onload
で読み込み時に実行されるようにしました。
document
からaddEventListener
メソッドを使って、ページ全体にcontextmenu
イベントが効くようにしました。
引数で受け取っているevent
オブジェクトから、preventDefault
メソッドを呼ぶことで
ブラウザのデフォルト動作を禁止することができます。
これで、右クリックされたときにメニューが出ないように制御できました。
しっかり動作するかは、実際にそれぞれのブラウザで確認した方が良いかと思います。(MacのChrome, Safari, Firefoxでは効くことが確認できました)
JavaScriptでcontextmenuイベントを設定する方法まとめ
今回はJavaScriptでcontextmenuを設定する方法について書きました。
まとめると、下記のようになります。
・contextmenuイベントはoncontextmenu属性またはaddEventListenerメソッドでイベントを追加できた。
・右クリックの禁止は、contextmenuイベントを実行して、preventDefaultを使うことで実現できた。
コメント