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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

862閲覧

onmouseoverを使って画像を切り替えられない

cjaue.34

総合スコア15

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

2クリップ

投稿2019/08/29 06:18

閲覧いただきありがとうございます。
ご回答のほど宜しくお願いします。

前提・実現したいこと

HTML,CSS,JSを用いて、画像にホバーしたら別の画像に切り替わるようにしたいと思っています。
HTMLはwrapper構造を用いて3つの画像が横並びになるようにしています。
それぞれの画像 img_a_off img_b_off img_c_off について、ホバーしたときにimg_a_on img_b_on img_c_on に切り替わるようにしたいです。

発生している問題・エラーメッセージ

プレビューしたところ、ホバーしようとすると画像が表示されません(alt属性に入力した文字が出てきます)。コンソールのエラーにはnet::ERR_FILE_NOT_FOUNDと書かれています。HTML,JS双方のsrc属性に入力した画像のパスは正しいです。

該当のソースコード

HTML

1<div class="wrapper"> 2 <a href="#"><img id="top_a" src="img_a_off.png" class="item" onmouseover="mouseon1();" onmouseout="mouseoff1();" alt="画像Aを表示"></a> 3 <a href="#"><img id="top_b" src="img_b_off.png" class="item" onmouseover="mouseon2();" onmouseout="mouseoff2();" alt="画像Bを表示"></a> 4 <a href="#"><img id="top_c" src="img_c_off.png" class="item" onmouseover="mouseon3();" onmouseout="mouseoff3();" alt="画像Cを表示"></a> 5</div>

CSS

1.wrapper { 2 overflow: hidden; 3 width: 100%; 4} 5.item { 6 float: left; 7 padding: 30px 30px 40px 50px; 8 width: 25%; 9}

JavaScript

1function mouseon1() { 2 var obj1 = document.getElementById("top_a"); 3 obj1.src = "img_a_on.png"; 4} 5function mouseon2() { 6 var obj2 = document.getElementById("top_b"); 7 obj2.src = "img_b_on.png"; 8} 9function mouseon3() { 10 var obj3 = document.getElementById("top_c"); 11 obj3.src = "img_c_on.png"; 12} 13 14function mouseoff1() { 15 var obj1 = document.getElementById("top_a"); 16 obj1.src = "img_a_off.png"; 17} 18function mouseoff2() { 19 var obj2 = document.getElementById("top_b"); 20 obj2.src = "img_b_off.png"; 21} 22function mouseoff3() { 23 var obj3 = document.getElementById("top_c"); 24 obj3.src = "img_c_off.png"; 25}

試したこと

●ゆっくりホバーさせてみると、どうやらwrapper構造全体もしくはmarginの範囲で画像が表示されなくなることが分かりました。

img_aにホバーしようとすると、同時にimg_b, img_cも画像が表示されなくなります。
最初は funciton mouseonX()を、数字で分けず3つ全てくくっていましたが、バラバラにしました。

●ホバーから解除(mouseout)しても画像は表示されないままです。

........................
足りない情報があれば教えてください。よろしくお願いいたします!

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

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

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

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

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

m.ts10806

2019/08/29 06:21

mouseoverくらいでしたらCSSだけで実装可能ですが、そうしないのは何かべつの処理を入れる予定があるとか、何かの課題ですか?
dit.

2019/08/29 06:41

動きそうな気がしますが… 画像のパスが、JavaScriptから見たパスになっていないことが原因のように思います。 JSを別ファイルで読み込んでるなどで、画像とJSの階層が違うのではないでしょうか。
m.ts10806

2019/08/29 06:53

dit.さん >画像のパスが、JavaScriptから見たパスになっていないことが原因 base64とかでJavaScriptから読み込ませるわけでもなくsrcを切り替えているだけなのでHTMLから見たパスでないといけないと思います。
cjaue.34

2019/08/29 07:10

JavaScriptの練習として使える知識を増やしておきたいと思ってやっています。 無理そうならCSSでやってみます…!
m.ts10806

2019/08/29 07:11

st.さん 既に回答していますしdit.さんも仰っていますが、画像が正しく準備されているなら問題が起きません。
dit.

2019/08/29 07:29

m.ts10806さん失礼しました。 浅はかな知識で突っ込むべきではないですね。 ちゃんと検証して来ました。HTMLから見たパスが正しいです。
guest

回答2

0

ベストアンサー

提示のコードではちゃんと動いているように見えます。
ALTが出るということは画像パスが間違ってるんじゃないかなぁとは思います。

とりあえず同じ処理が並んでるので引数によってon・offそれぞれ1つにまとめてみました。

html

1<div class="wrapper"> 2 <a href="#"><img id="top_a" src="img_a_off.png" class="item" onmouseover="mouseon('a');" onmouseout="mouseoff('a');" alt="画像Aを表示"></a> 3 <a href="#"><img id="top_b" src="img_b_off.png" class="item" onmouseover="mouseon('b');" onmouseout="mouseoff('b');" alt="画像Bを表示"></a> 4 <a href="#"><img id="top_c" src="img_c_off.png" class="item" onmouseover="mouseon('c');" onmouseout="mouseoff('c');" alt="画像Cを表示"></a> 5</div> 6<script> 7function mouseon(name) { 8 let obj = document.getElementById("top_"+name); 9 obj.src = "img_"+name+"_on.png"; 10} 11function mouseoff(name) { 12 let obj = document.getElementById("top_"+name); 13 obj.src = "img_"+name+"_off.png"; 14} 15</script>

もう1つ引数入れれば関数も1つにできますね。

html

1<div class="wrapper"> 2 <a href="#"><img id="top_a" src="img_a_off.png" class="item" onmouseover="mouseToggle('on','a');" onmouseout="mouseToggle('off','a');" alt="画像Aを表示"></a> 3 <a href="#"><img id="top_b" src="img_b_off.png" class="item" onmouseover="mouseToggle('on','b');" onmouseout="mouseToggle('off','b');" alt="画像Bを表示"></a> 4 <a href="#"><img id="top_c" src="img_c_off.png" class="item" onmouseover="mouseToggle('on','c');" onmouseout="mouseToggle('off','c');" alt="画像Cを表示"></a> 5</div> 6<script> 7function mouseToggle(onoff,name) { 8 let obj = document.getElementById("top_"+name); 9 obj.src = "img_"+name+"_"+onoff+".png"; 10} 11</script>

投稿2019/08/29 06:37

m.ts10806

総合スコア80850

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

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

cjaue.34

2019/08/29 07:36

回答ありがとうございます! 同じような繰り返しなのに短縮できないかなぁと思っていたので、とてもありがたいです。ありがとうございます!
m.ts10806

2019/08/29 07:44

引数や変数をうまく使えるようになるとプログラミングしてる感が出て楽しくなりますよ。
cjaue.34

2019/08/29 07:48

ありがとうございます。 objの宣言のところはletではなくvarで代用可能でしょうか?
cjaue.34

2019/08/30 12:14

なるほど…初めて知りました。ありがとうございます!
guest

0

もう一度やり直して書き直したら上手くいくようになりました…
画像パスに何かミスがあったのかもしれません…。
回答してくださった方、ありがとうございました。

投稿2019/08/29 07:37

cjaue.34

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問