[解決済み] JavaScriptを使用しています。マウスボタンが押されているかどうかをチェックする
質問
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のコードを持ち越したのかわかりません。イベントハンドラを直接ドキュメントにアタッチした方が良さそうです。
関連
-
HTML+CSS+JavaScriptで簡単な三目並べゲームを作成する。
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] event.preventDefault() vs. return false
-
[解決済み] JavaScriptでカンマを桁区切りにして数値を表示する方法
-
[解決済み] JavaScriptでsetIntervalの呼び出しを停止する
-
[解決済み] テキストボックスのEnterキーで、JavaScriptでボタンクリックをトリガーする
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vue Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
JavaScriptの配列共通メソッド解説
-
vueの補間表現とv-textディレクティブの違いについて
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】React-Redux: アクションはプレーンオブジェクトでなければならない。非同期アクションにはカスタムミドルウェアを使用する
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules
-
JavaScriptのgetElementById()メソッド入門