質問するログイン新規登録

Q&A

解決済

1回答

477閲覧

hover表示した画像をフェード切り替え表示したい

junichi45

総合スコア1

CSS3

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2023/04/03 08:22

0

0

実現したいこと

jQueryでhover表示した画像をフェード切り替えしたい。

前提

ホームページのメガメニューを製作しており、メニューのテキストをhover時にイメージ画像を表示・切り替えしたいと思いコードを書いたのですが、知識が浅くどこを間違えているのか分からず、ご教授いただけますと幸いです。

■html

<ul> <li class="change_btn01"><a href="">menu01</a></li> <li class="change_btn02"><a href="">menu02</a></li> <li class="change_btn03"><a href="">menu03</a></li> </ul> <img src="img/img01.png" class="chenge_image">

■jQuery
<script>
$(function() {
$(".change_btn01").hover(function() {
$(".chenge_image").attr("src","img/img01.png");
});
$(".change_btn02").hover(function() {
$(".chenge_image").attr("src","img/img02.png");
});
$(".change_btn03").hover(function() {
$(".chenge_image").attr("src","img/img03.png");
});
});
</script>

■css

<style> .change_image{ transition:all 0.5s ease; } </style>

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

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

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

int32_t

2023/04/03 21:48

現状のコードでどういう問題があるのでしょうか。
junichi45

2023/04/04 10:02

コメントありがとうございます。質問の情報が足りず申し訳ありません。menu01、menu02と順にテキスト上にカーソルを置いた場合、img01、img02と画像が変わる際、フェードイン・フェードアウトで画像切り替えをさせたいのですが、うまく書けずに躓いておりました。
int32_t

2023/04/04 12:46

ええと、まだ現状の問題の説明ができていませんが、「フェードイン・フェードアウトで画像切り替えをさせたいが、現状では瞬時に切り替わってしまう」でいいですか? 「フェードイン・フェードアウト」というのは、「前の画像がフェードアウトしたあとに次の画像がフェードイン」ですか? それとも「前の画像がフェードアウトしながら次の画像がフェードイン」ですか?
junichi45

2023/04/05 03:01

おっしゃる通り「フェードイン・フェードアウトで画像切り替えをさせたいが、現状では瞬時に切り替わってしまう」という状況でした。正確な説明ができておらず申し訳ありません。。 実現したい事としては「前の画像がフェードアウトしながら次の画像がフェードイン」が希望の動作となります。
guest

回答1

0

ベストアンサー

「前の画像がフェードアウトしながら次の画像がフェードイン」が希望の動作

現在のHTMLの構造では無理です。クロスフェードということは、前の画像と次の画像を同時に同位置に表示する必要があります。

  • <img> は3つ連続させて、それぞれ img01.png img02.png img03.png をセットしておき、最初の2つには position: absolute を付け、最初の1つ以外は opacity: 0 を付けておく。
  • hover 時には、対応する <img> のクラスを操作して、opacity: 1 に変更する。それ以外の <img> のクラスを操作して opacity: 0 に変更する。

投稿2023/04/05 04:49

int32_t

総合スコア22019

junichi45

2023/04/05 06:39

ご回答ありがとうございます。重ねることでクロスフェードを実現するのですね。2点目のhover時のimg操作がまだまだ知識足らずでしたのでもう少し勉強してみます!
junichi45

2023/04/05 07:37 編集

追記 もっと良い書き方があるのだと思いますが、 画像を重ねて設置し、hover時にその他の画像を非表示とすることでできました! 貴重なアドバイスをいただきありがとうございます! <a href="" class="megalink">親メニュー</a> <div class="megamenu"> <ul> <li class="change_btn01"><a href="">メニュー1</a></li> <li class="change_btn02"><a href="">メニュー2</a></li> <li class="change_btn03"><a href="">メニュー3</a></li> </ul> </div> <div class="megamenu_img"> <img src="<?php bloginfo('template_directory');?>/img/img01.png" class="chenge_image1"> <img src="<?php bloginfo('template_directory');?>/img/img02.png" class="chenge_image2"> <img src="<?php bloginfo('template_directory');?>/img/img03.png" class="chenge_image3"> </div> <style> .megamenu_img > img{ opacity: 0; } .chenge_image_visible{ transition:all 0.5s ease; opacity: 1!important; } </style> <script> $(function () { $(".megalink").hover( function () { // メガメニューの親ボタンをhoverした時にメニュー1の画像表示 $(".chenge_image1").addClass("chenge_image_visible"); $(".chenge_image2").removeClass("chenge_image_visible"); $(".chenge_image3").removeClass("chenge_image_visible"); }, function () { $(".chenge_image1").removeClass("chenge_image_visible"); } ); $(".change_btn01").hover( function () { $(".chenge_image1").addClass("chenge_image_visible"); $(".chenge_image2").removeClass("chenge_image_visible"); $(".chenge_image3").removeClass("chenge_image_visible"); } ); $(".change_btn02").hover( function () { $(".chenge_image2").addClass("chenge_image_visible"); $(".chenge_image1").removeClass("chenge_image_visible"); $(".chenge_image3").removeClass("chenge_image_visible"); } ); $(".change_btn03").hover( function () { $(".chenge_image3").addClass("chenge_image_visible"); $(".chenge_image1").removeClass("chenge_image_visible"); $(".chenge_image2").removeClass("chenge_image_visible"); } ); }); </script>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問