質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

12456閲覧

HTML キーの同時押し

satoshi501

総合スコア60

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2016/06/21 07:03

お世話になります。

HTMLでパソコンのキーボードから押したボタンによって動作が分岐する機能を作成しています。

現在上記のプログラムはできたのですが、更にキーを同時に押した場合の処理も行いたいと思っているのですがうまくいきません。

すいませんがご教授お願い致します。

現在のソース

<html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <head> <script type="text/javascript"> <!-- var press1 = 0; var press2 = 0; document.onkeydown = testfunction; function testfunction() { if (event.keyCode == 66) //「B」が押されたか確認 { document.getElementById("key1").innerHTML = ++press1; } if (event.keyCode == 70) //「F」が押されたか確認 { document.getElementById("key2").innerHTML = ++press2; } } //--> </script> </head> <body> key1: <span id="key1"></span>回;<br> key2: <span id="key2"></span>回;<br> </body> </html>

BとFを同時に押した場合に回数が増えるようにしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takito

2016/06/21 07:30

具体的に何がうまくいっていないのでしょうか?「BとFを同時に押した場合に回数が増えるようにしたいです」ということは、「BかFのどちらか一方だけが押されている場合は回数が増えない」ということでしょうか?
satoshi501

2016/06/21 08:33

返答ありがとうございます。 とりあえず今回はBとFを同時に押した際の処理を行いたいです。 ですので、サンプルで書いたBとFの単体の機能はなくても問題ないです。
guest

回答2

0

ベストアンサー

Bが押された状態、Fが押された状態を変数で保持しておき、両方がtrueになったときに処理するようにしましょう。参考のコードをjsFiddleで作成しました。
https://jsfiddle.net/yxr5u1cL/

Javascript

1var press1 = 0; 2var press2 = 0; 3var press3 = 0; 4document.onkeydown = pressFunction; 5document.onkeyup = releaseFunction; 6var keyStatus = {}; 7 8// キーを押されたら実行する処理 9function pressFunction(e) 10{ 11 if(e.keyCode == 66) //「B」が押されたか確認 12 { 13 document.getElementById("key1").innerHTML = ++press1; 14 } 15 if (e.keyCode == 70) //「F」が押されたか確認 16 { 17 document.getElementById("key2").innerHTML = ++press2; 18 } 19 20 keyStatus[e.keyCode] = true; // 該当のキーコードをtrueにする 21 if(keyStatus[66] && keyStatus[70]) { // BとF両方trueなら 22 document.getElementById("key3").innerHTML = ++press3; 23 } 24} 25// キーが離されたら実行する処理 26function releaseFunction(e) 27{ 28 keyStatus[e.keyCode] = false; // 該当のキーコードをfalseにする 29}

投稿2016/06/21 07:31

masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satoshi501

2016/06/21 08:43

このやり方でうまく実行でき、また理解もできました。 ありがとうございました。
guest

0

keydown 時に keyCode をキャッシュし、keyup 時に該当 keyCode をクリアします。

JavaScript

1'use strict'; 2function handleKeydownUp (event) { 3 var keyCode = event.keyCode, 4 keyCodes = this.keyCodes, 5 i = keyCodes.indexOf(keyCode); 6 7 switch (event.type) { 8 case 'keydown': 9 if (i === -1) { 10 keyCodes.push(keyCode); 11 } 12 13 if (keyCodes.indexOf(66) !== -1 && keyCodes.indexOf(70) !== -1) { 14 console.log('B and F'); 15 } 16 break; 17 case 'keyup': 18 keyCodes.splice(i, 1); 19 break; 20 } 21 22 console.log(event.type, JSON.stringify(keyCodes)) 23} 24 25var listener = {keyCodes: [], handleEvent: handleKeydownUp}; 26document.addEventListener('keydown', listener, false); 27document.addEventListener('keyup', listener, false);

Re: satoshi501 さん

投稿2016/06/21 07:45

編集2016/06/21 07:52
think49

総合スコア18164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satoshi501

2016/06/21 08:41

ありがとうございます! 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問