知名度が低いウェブ標準ひとり Advent Calendar 2021 – 07 日目
今日は auxclick
というイベントです。右クリックや中クリック等、補助的 (auxiliary) なボタンをクリックした際に発火します。click
は主ボタンのみが対象。
「左クリック」等は設定や装置の状況で変わるので適宜変換して読み取ってください。
基本的な使い方
click
イベントとほぼ同じで、ただ主ボタン以外のクリック時に発火します。
el.addEventListener('auxclick', (event) => { console.log(event.type); });
飛んでくるのも click
イベントと同様 MouseEvent
のインスタンスです。event.button
の値でどのボタンを押されたのかを判断できます。
使いどころ
リンクを中クリックで別タブで開くやつをキャンセルしたりできるそうです。
コンテキストメニュー制御は contextmenu
イベントで
auxclick
を preventDefault()
してもコンテキストメニューは出てくるので、その制御には向きません。
ブラウザー本来のコンテキストメニューを隠すには contextmenu
イベントで event.preventDefault()
してやる必要があります。クリック位置もそっちの event.pageX
とかで取れます。
- デモ(コンテキストメニュー):https://codepen.io/ginpei/pen/xxXZMQj
Safari は未対応
mousedown
とかで頑張りましょう。
英単語 aux (auxiliary)
「補助的な」という意味です。
ちなみに DOM の仕様上は auxiliary button という単語は中ボタンを指します。その文脈では右ボタンは secondary button という表現に。主となる左ボタンは primary button 。
auxclick
の説明中に auxiliary という単語は出現せず、代わりに non-primary button と呼ばれています。分かりやすいね。
おしまい
便利な特殊 UI の実装に使うなら良いけど、右クリック禁止系列のバリバリ制御はやめて利用者の好きなように操作させてほしいですね。