押下されたマウスボタンを取得する - JavaScript

JavaScriptで押下されたマウスボタンを取得するコードを紹介します。

概要

こちらの記事では、マウスボタンの押下の検出とその座標を取得するコードを紹介しました。 この記事ではマウスボタンのどのボタンが押されたかを判別するコードを紹介します。
マウスで押し下げれれたボタンの種類を判別するには、イベントハンドラの引数のbuttonプロパティ、または、buttonsプロパティを利用します。

プログラム1:押下されたボタンを検出する

コード

下記のHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
	<meta charset="utf-8" />

  <script type="text/javascript">
    function init()
    {
      window.onmousedown = handleMouseDown;
    }

    function handleMouseDown(event) {
      event = event || window.event; // IE対応
      target = document.getElementById("output");
      if (event.button == 0) {
        target.innerHTML = "左ボタンが押されました。";
      }
      else if (event.button == 1) {
        target.innerHTML = "中ボタンが押されました。";
      }
      else if (event.button == 2) {
        target.innerHTML = "右ボタンが押されました。";
      }
    }
  </script>

</head>
<body onload="init();">
  <div id="output" ></div>

</body>
</html>

解説

bodyタグのonload属性に"init();"の記述により、ページ表示時にinit()関数を呼び出します。

function init()
{
  window.onmousedown = handleMouseDown;
}
init関数では、onmousedown イベントにhandleMouseDown()関数を、イベントハンドラとして設定します。

    function handleMouseDown(event) {
      event = event || window.event; // IE対応
      target = document.getElementById("output");
      if (event.button == 0) {
        target.innerHTML = "左ボタンが押されました。";
      }
      else if (event.button == 1) {
        target.innerHTML = "中ボタンが押されました。";
      }
      else if (event.button == 2) {
        target.innerHTML = "右ボタンが押されました。";
      }
    }
MouseDownイベントハンドラでは、イベントハンドラの引数のbuttonプロパティの値を確認し、メッセージを表示します。ボタンと値の対応は以下となります。

buttonプロパティの値とマウスボタンとの対応表
button値ボタンの種類
0左ボタン
1中ボタン
2右ボタン

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


Webブラウザのウィンドウ内でマウスボタンをクリックします。クリックしたボタンを表すメッセージが画面に表示されます。


別のボタンをクリックすると、メッセージも変わります。


プログラム2 : 複数のボタンの同時押しを検出する

コード

下記のHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
  <meta charset="utf-8" />

  <script type="text/javascript">
    function init()
    {
      window.onmousedown = handleMouseDown;
    }

    function handleMouseDown(event) {
      event = event || window.event; // IE対応
      target = document.getElementById("output");
      target.innerHTML = "";
      if ((event.buttons & 1) == 1) {
        target.innerHTML += "左ボタンが押されました。";
      }
      if ((event.buttons & 4) == 4) {
        target.innerHTML += "中ボタンが押されました。";
      }
      if ((event.buttons & 2) == 2) {
        target.innerHTML += "右ボタンが押されました。";
      }
    }
  </script>

</head>
<body onload="init();">
  <div id="output" ></div>

</body>
</html>

解説

bodyタグのonload属性に"init();"の記述により、ページ表示時にinit()関数を呼び出します。

init関数では、onmousedown イベントにhandleMouseDown()関数を、イベントハンドラとして設定します。この部分は先のコードと同様の処理です。

function handleMouseDown(event) {
  event = event || window.event; // IE対応
  target = document.getElementById("output");
  target.innerHTML = "";
  if ((event.buttons & 1) == 1) {
    target.innerHTML += "左ボタンが押されました。";
  }
  if ((event.buttons & 4) == 4) {
    target.innerHTML += "中ボタンが押されました。";
  }
  if ((event.buttons & 2) == 2) {
    target.innerHTML += "右ボタンが押されました。";
  }
}
MouseDownイベントハンドラでは、イベントハンドラの引数のbuttonsプロパティの値を確認し、メッセージを表示します。buttonsの値は押されたボタンの論理和(OR)の値が送られます。ボタンの押下を検出するには、buttons値とボタンの値とでANDをとります。
ボタンと値の対応は以下となります。

buttonsプロパティの値とマウスボタンとの対応表
button値button値(16進数)ボタンの種類
10x01左ボタン
20x02右ボタン
40x04中ボタン

実行結果

上記のHTMLファイルをWebブラウザで表示します。Webブラウザ内でマウスボタンをクリックすると押されたボタンが画面に表示されます。


複数のボタンを同時にクリックすると、メッセージも複数表示されます。



3つのボタンを同時にクリックした場合も検出できます。


著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
掲載日: 2015-10-08
iPentec all rights reserverd.