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

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

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

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

Q&A

解決済

1回答

7228閲覧

Commandキー(Ctrlキー)を押している状態でZキーを離すとイベントが取得できない

ukey

総合スコア12

JavaScript

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

1グッド

0クリップ

投稿2018/02/09 13:58

javascriptでUndoの機能を実装しようとしています.macで,commandキーとzキーを同時押しするとundoが実行される感じです.
同時押しの取得は,keydownイベントで押されたキーコードに対応する変数をtrueとし,両方がtrueになった際に同時押しと判定する.という実装になっています.この際,キーが離された時に対応する変数をfalseにするのですが,commandキーが押されている状態でzキーを離してもkeyupイベントでzキーのイベントが取得できず,falseにならないと言った問題が生じています.
つまりcommaneキーを押しながらzキーを離すとzキーはずっと押されている状態と判定され,commandキーを押しっぱなしでzキーを連打して一つずつUndoするということができないといった状態です.
ブラウザはgoogleChromeの最新です.
解決策をご教授願いたいです.よろしくお願いします.

以下コードです.

javascript

1 var pressCommand = false; 2 var pressZ = false; 3 function undoKeydown(e) { 4 e = window.event || e; 5 if (e.keyCode == 90) pressCommand = true; 6 if (e.keyCode == 91) pressZ = true; 7 if (pressCommand && pressZ) undo(); 8 } 9 function undoKeyup(e) { 10 e = window.event || e; 11 if (e.keyCode == 90) pressCommand = false; 12 if (e.keyCode == 91) pressZ = false; 13 } 14 document.addEventListener("keydown", undoKeydown); 15 document.addEventListener("keyup", undoKeyup);
退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

commandはevent.metaKey, ctrlはevent.ctrlKeyで押されているかどうかがわかるので、↓のように書けます。

javascript

1addEventListener('keydown', function (event) { 2 if (event.key === 'z' && (event.ctrlKey || event.metaKey)) { 3 // undoの処理 4 } 5});

こちらのページでキーを押して動作を確認してみてください。
https://codepen.io/hoo-chan/pen/WMpyRo

投稿2018/02/09 15:17

編集2018/02/10 06:40
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ukey

2018/02/09 21:58

動作確認できました......!ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問