1. ホーム
  2. javascript

[解決済み] JavaScriptを使用しています。マウスボタンが押されているかどうかをチェックする

2022-04-26 23:42:36

質問

JavaScriptでマウスボタンが押されているかどうかを検出する方法はありますか?

mousedown"イベントについては知っていますが、私が必要としているのはこれではありません。 マウスボタンが押されてからしばらくしてから、まだ押されているかどうかを検出できるようにしたいのです。

これは可能でしょうか?

どのように解決するのですか?

Paxの解決策について:ユーザーが意図的または偶然に複数のボタンをクリックした場合、それは機能しません。なぜ知っているのかは聞かないでください :-(.

正しいコードはこのようになるはずです。

var mouseDown = 0;
document.body.onmousedown = function() { 
  ++mouseDown;
}
document.body.onmouseup = function() {
  --mouseDown;
}

このようなテストで

if(mouseDown){
  // crikey! isn't she a beauty?
}

どのボタンが押されたかを知りたい場合は、mouseDownをカウンタの配列にして、別々のボタンで別々にカウントすることを覚悟してください。

// let's pretend that a mouse doesn't have more than 9 buttons
var mouseDown = [0, 0, 0, 0, 0, 0, 0, 0, 0],
    mouseDownCount = 0;
document.body.onmousedown = function(evt) { 
  ++mouseDown[evt.button];
  ++mouseDownCount;
}
document.body.onmouseup = function(evt) {
  --mouseDown[evt.button];
  --mouseDownCount;
}

これで、どのボタンが押されたかを正確に確認することができます。

if(mouseDownCount){
  // alright, let's lift the little bugger up!
  for(var i = 0; i < mouseDown.length; ++i){
    if(mouseDown[i]){
      // we found it right there!
    }
  }
}

さて、上記のコードは、0から始まるボタン番号を渡してくれる標準準拠のブラウザでのみ動作することに注意してください。IEでは、現在押されているボタンのビットマスクが使われます。

  • 0は何も押されていないことを表します。
  • 1は左側
  • 2(右用
  • 4:中央
  • および上記の任意の組み合わせ(例:5で左+真ん中

だから、あなたのコードをそれに応じて調整してください 練習として残しておきます。

IE は ... "event" というグローバルなイベントオブジェクトを使用していることを忘れないでください。

ちなみにIEには、あなたのケースに役立つ機能があります。他のブラウザがマウスボタンのイベント(onclick, onmousedown, onmouseup)に対してのみ "button" を送るのに対し、IEは onmousemove にもそれを送ります。そのため、ボタンの状態を知る必要があるときに onmousemove を聞き始め、それを取得したらすぐに evt.button をチェックすることができます - これで、どのマウスボタンが押されたかがわかります。

// for IE only!
document.body.onmousemove = function(){
  if(event.button){
    // aha! we caught a feisty little sheila!
  }
};

もちろん、彼女が死んだふりをして動かなかったら何も得られない。

関連リンク

アップデート#1 : なぜ、document.body-styleのコードを持ち越したのかわかりません。イベントハンドラを直接ドキュメントにアタッチした方が良さそうです。