82917


できればjavascriptで制御したいのですが、どのようにすればよいでしょうか？


CC BY-SA 4.0
2021-10-06T06:35:08.547
82912
2021-10-06T10:49:09.213
48513
question
javascript
ホイールクリックを禁止したいです。


何の機能を禁止するかにも依るようですが、一般的な「新しいタブでリンクを開く」機能を禁止する場合には、[`auxclick`
イベント](https://developer.mozilla.org/en-US/docs/Web/API/Element/auxclick_event)
で [`MouseEvent.button` が `1`](https://developer.mozilla.org/en-
US/docs/Web/API/MouseEvent/button#return_value) のものを抑止すれば良いようです。

[Element: auxclick event > Preventing default
actions](https://developer.mozilla.org/en-
US/docs/Web/API/Element/auxclick_event#preventing_default_actions):

> For the vast majority of browsers that map middle click to opening a link in
> a new tab, including Firefox, it is possible to cancel this behavior by
> calling `preventDefault()` from within an auxclick event handler.
[code]

    link.addEventListener("auxclick", (e) => {
      if (e.button === 1) {
        console.log("middle button clicked");
        e.preventDefault();
      }
    });
[/code]

[code]

    <html>
      <body>
        <a href="https://ja.stackoverflow.com/" id="link">スタック・オーバーフロー</a>
      </body>
    </html>
[/code]

ただしMDNの説明にもある通り、IE, Safariでは `auxclick` イベントが実装されておらず想定通り動作しません。  
(古い説明([例](https://stackoverflow.com/a/1803868/4506703))では [`click`
イベント](https://developer.mozilla.org/ja/docs/Web/API/Element/click_event)と
[`MouseEvent.which ===
2`](https://developer.mozilla.org/ja/docs/Web/API/UIEvent/which)
を用いて実装されていることがありますが、もしかするとこれらのブラウザではこちらが利用できるかもしれません(※環境が無いので私は試せていません)。)

* * *

それ以外の機能、オートスクロールやクリップボードペースト機能の禁止は `mousedown` や `pointerdown` で行うようです。

> When listening for auxclick events originating on elements that do not
> support input or navigation, you will often want to explicitly prevent other
> default actions mapped to the down action of the middle mouse button. On
> Windows this is usually autoscroll, and on macOS and Linux this is usually
> clipboard paste. This can be done by preventing the default behavior of the
> [`mousedown`](https://developer.mozilla.org/en-
> US/docs/Web/API/Element/mousedown_event) or
> [`pointerdown`](https://developer.mozilla.org/en-
> US/docs/Web/API/HTMLElement/pointerdown_event) event.


CC BY-SA 4.0
2021-10-06T10:33:45.597
82917
2021-10-06T10:49:09.213
2021-10-06T10:49:09.213
2808
2808
82912
answer