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

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

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

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

HTML

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

Q&A

解決済

2回答

2561閲覧

HTML上でキー入力による画像の切り替えをしたい

automaker

総合スコア3

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2021/06/14 09:25

編集2021/06/15 00:01

HTML上でキー入力により画像の切り替えを行いたいです。

Visual Studio CodeでHTMLを作成しております。

最初に画像Aが表示され、矢印キーを押すと矢印に応じて、B,C,D,E に画像が切り替わるというものを作成しました。

ところが、一度AからBやCに画像が切り替わるとその後は何を押しても切り替わったままです。

左を押したら、Bが出て、その後右を押したらCが出るという風にしたいです。

以下、ソースコードです。

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ITM second</title> </head> <body> <img src="A.png", width="700" height="433" border="0" alt=""> <script> //なにかキーが押されたとき、keydownfuncという関数を呼び出す addEventListener( "keydown", keydownfunc ); //キーが押されたときに呼び出される関数 function keydownfunc( event ) { //押されたボタンに割り当てられた数値(すうち)を、key_codeに代入 var key_code = event.keyCode; if( key_code === 37 ) document.write( '<img src="B.png">' ); //「左ボタン」が押されたとき if( key_code === 38 ) document.write( '<img src="C.png">' ); //「上ボタン」が押されたとき if( key_code === 39 ) document.write( '<img src="D.png">' ); //「右ボタン」が押されたとき if( key_code === 40 ) document.write( '<img src="E.png">' ); //「下ボタン」が押されたとき } </script> </body> </html>

繰り返し処理が必要なのかなと調べてやってみましたが、うまくできませんでした。

お知恵をいただけるととてもありがたいです。

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

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

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

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

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

m.ts10806

2021/06/14 09:29

また、document.write()はHTML構造を壊しやすくなるとして非推奨なので別機能の検討を。
automaker

2021/06/14 09:32

ありがとうございます。 今日初めてHTMLに触れたのでdocument.write()が良くないこと知りませんでした。 ありがとうございました。
m.ts10806

2021/06/14 09:33

>今日初めてHTMLに触れたので いえ、HTMLではなくJavaScriptです。
automaker

2021/06/15 00:00

これはJavaScriptなんですね。 ありがとうございます。
automaker

2021/06/15 23:57

申し訳ございません。 解決にするのをわかっておりませんでした! 解決済にします。
guest

回答2

0

ベストアンサー

1回キーを押すと、
document.write()によりbody内まるっと上書きしてます。

キー押す前
イメージ説明
キー押した後
イメージ説明
書いたJavaScriptすらも消えてます。

documentにwriteするため、こうなっています。
「画像」だけ切り替えたいなら、画像のsrcの中だけを切り替えた方が良いです。

html

1 2<img src="A.png" width="700" height="433" border="0" alt="" id="imagechange">

キーと画像が対応するオブジェクトでも持っておけばifも少なくて済みます。

js

1const list = { 2 37:"B" 3,38:"C" 4,39:"D" 5,40:"E" 6} 7//なにかキーが押されたとき、keydownfuncという関数を呼び出す 8addEventListener( "keydown", keydownfunc ); 9 10//キーが押されたときに呼び出される関数 11function keydownfunc( event ) { 12 13 //押されたボタンに割り当てられた数値(すうち)を、key_codeに代入 14 let img = document.getElementById("imagechange"); 15 let key_code = event.keyCode; 16 if(list[key_code]){ 17 img.src = list[key_code]+".png"; 18 }else{ 19 img.src = "A.png"; 20 } 21}

投稿2021/06/14 09:42

m.ts10806

総合スコア80875

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

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

automaker

2021/06/15 01:31

ありがとうございます。 やってみたところできました! document.write()は上書きをしてしまうのですね! 勉強になりました!
m.ts10806

2021/06/15 01:32

まあ、動くコードそのまま提示してますから。 質問者さんが理解できたか、他の人に説明できるかが大事です。
guest

0

javascript

1<img src="A.png" id="img"> 2<script> 3document.addEventListener( "keydown",e=>{ 4 var key_code = e.keyCode; 5 var src="A.png"; 6 if( key_code === 37 ) src="B.png"; 7 if( key_code === 38 ) src="C.png"; 8 if( key_code === 39 ) src="D.png"; 9 if( key_code === 40 ) src="E.png"; 10 document.querySelector('#img').src=src; 11}); 12</script>

投稿2021/06/14 10:28

yambejp

総合スコア116724

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

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

automaker

2021/06/15 00:41

ご回答ありがとうございます。 無事画像の切り替えができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問