プロが教えるわが家の防犯対策術!

javaScriptで、
if (event.keyCode == 38) UP();
if (event.keyCode == 39) RIGHT();
if (event.keyCode == 37) LEFT();
if (event.keyCode == 40) DOWN();
のような処理で、上下左右の方向に画像などを移動させています。

しかし、上キーと右キーを同時に押しても
右上には移動しません。

率直にJavaScriptでキーボード入力を行って

右上、右下、左上、左下のように

2つのキーを同時に押したことを判定する方法は

ありますでしょうか?

ためしに&&を用いて

上キーと右キーが押されたとき用にUP_RIGHT()

を作ってコールしたのですが思ったように動かないようでした。

どうかご教授ください。

A 回答 (1件)

event.keyCode は発生したイベントの keyCode しか取得できません。


キーボードのしくみ上、同時に押したとしても必ずどちらかが先/後になるので、
最後に押されたキーによるイベントが発生することになります。

Shift などの特殊キー以外で「押しっぱなし」の状態を知る方法は・・
多分 onKeyDown 時に「38が押された」と変数に保持して、
onKeyUp で「38を離した」と解除するように書く必要があると思います。
(onKeyUp が何らかの原因で発生しないことがあるかどうかはわかりませんが・・。)
書くのは少々面倒かもしれません。。

興味があったので、簡単な動作確認スクリプトを書いてみました(IE用)。
一応、上手くいきそうですが・・・。

<html>
<head>
<title>keyCode Test</title>
<script type="text/javascript">
<!--

function msg(str) {
var log = document.getElementById('log');
log.innerHTML += str + "(" + event.keyCode + ") <br />";
}

// -->
</script>
</head>
<body onKeyDown="msg('keyDown')" onKeyUp="msg('keyUp')" onKeyPress="msg('keyPress')">

<div id="log"></div>

</body>
</html>
    • good
    • 0
この回答へのお礼

fukku22さん。

ご回答ありがとうございます。

なるほど^^押された事を変数に記録しておき、

それぞれの変数値を見て、同時押しなら処理を実行

そしてキーを離したとき変数値をクリアする…。

ということでよろしいでしょうか?

サンプルを参考に組んで見ます。

ありがとうございます。

お礼日時:2004/11/24 08:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!