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

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

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

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

jQuery

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

解決済

クリックして画像切り替えがうまくいかない、画面が動いてしまう

sp1
sp1

総合スコア2

HTML5

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

jQuery

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

1回答

0リアクション

1クリップ

207閲覧

投稿2022/10/05 08:33

前提

https://junpei-sugiyama.com/thumbnail-switching-image/

こちらのサイトで紹介されているjQueryと

https://www.boel.co.jp/tips/vol86/

こちらで紹介されているタブ機能を使用して、

サンプル画像を表示・切り替えができるように設定したいと考えていますが、
サブの画像をクリックするとメインの画像に合わせて画面が移動してしまいます。
また、タブをクリックして別の画像を表示する際、クリック後に本来表示されるはずの画像が出ず、クリック前のメイン画像が表示されてしまいます。

イメージ説明

jQueryコードはいじっていません。

実現したいこと

  • サブ画像をクリックしても画面がズレないようにしたい
  • タブクリック後に正しい画像を表示させたい

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

画像の状態と、別のタブを開くと前に選択していた位置にあるサブ画像(前のタブで中央の画像を表示していたなら開いたタブでも中央の画像)が開いてしまいます。新しいタブを開いた際は1番左の画像が表示されるようにしたいです。 こちらも解決策がありましたら教えていただきたいです。

該当のソースコード

HTML

<main> <div class="main"> <h1 class="border" id="sample__page">製作事例のご紹介</h1> <div class="tab_wrap"> <input id="tab1" type="radio" name="tab_btn" checked> <input id="tab2" type="radio" name="tab_btn"> <input id="tab3" type="radio" name="tab_btn"> <input id="tab4" type="radio" name="tab_btn"> <input id="tab5" type="radio" name="tab_btn"> <input id="tab6" type="radio" name="tab_btn"> <div class="tab_area"> <label class="tab1_label" for="tab1">tab1</label> <label class="tab2_label" for="tab2">tab2</label> <label class="tab3_label" for="tab3">tab3</label> <label class="tab4_label" for="tab4">tab4</label> <label class="tab5_label" for="tab5">tab5</label> <label class="tab6_label" for="tab6">tab6</label> </div> <div class="panel_area"><!--画像サイズ800×600--> <div id="panel1" class="tab_panel"> <!-- メイン画像 --> <div class="main-img js-main-img"> <p><img src="images/861.svg" alt=""></p> <p>サンプル</p> <p>これはサンプルテキストです</p> </div> <!-- サムネイル画像 --> <ul class="sub-img js-sub-img"> <!-- 選択されている画像の枠線を変更 --> <li class="current"> <img src="images/861.svg" alt="" /> </li> <li> <img src="images/864.svg" alt="" /> </li> <li> <img src="images/866.svg" alt="" /> </li> </ul> </div> <div id="panel2" class="tab_panel"> <!-- メイン画像 --> <div class="main-img js-main-img"> <p><img src="images/861.svg" alt=""></p> <p>サンプル</p> <p>これはサンプルテキストです</p> </div> <!-- サムネイル画像 --> <ul class="sub-img js-sub-img"> <!-- 選択されている画像の枠線を変更 --> <li class="current"> <img src="images/861.svg" alt="" /> </li> <li> <img src="images/864.svg" alt="" /> </li> <li> <img src="images/866.svg" alt="" /> </li> </ul> </div> <div id="panel3" class="tab_panel"> <!-- メイン画像 --> <div class="main-img js-main-img"> <p><img src="images/861.svg" alt=""></p> <p>サンプル</p> <p>これはサンプルテキストです</p> </div> <!-- サムネイル画像 --> <ul class="sub-img js-sub-img"> <!-- 選択されている画像の枠線を変更 --> <li class="current"> <img src="images/861.svg" alt="" /> </li> <li> <img src="images/864.svg" alt="" /> </li> <li> <img src="images/866.svg" alt="" /> </li> </ul> </div> <div id="panel4" class="tab_panel"> <!-- メイン画像 --> <div class="main-img js-main-img"> <p><img src="images/861.svg" alt=""></p> <p>サンプル</p> <p>これはサンプルテキストです</p> </div> <!-- サムネイル画像 --> <ul class="sub-img js-sub-img"> <!-- 選択されている画像の枠線を変更 --> <li class="current"> <img src="images/861.svg" alt="" /> </li> <li> <img src="images/864.svg" alt="" /> </li> <li> <img src="images/866.svg" alt="" /> </li> </ul> </div> <div id="panel5" class="tab_panel"> <!-- メイン画像 --> <div class="main-img js-main-img"> <p><img src="images/861.svg" alt=""></p> <p>サンプル</p> <p>これはサンプルテキストです</p> </div> <!-- サムネイル画像 --> <ul class="sub-img js-sub-img"> <!-- 選択されている画像の枠線を変更 --> <li class="current"> <img src="images/861.svg" alt="" /> </li> <li> <img src="images/864.svg" alt="" /> </li> <li> <img src="images/866.svg" alt="" /> </li> </ul> </div> <div id="panel6" class="tab_panel"> <!-- メイン画像 --> <div class="main-img js-main-img"> <p><img src="images/861.svg" alt=""></p> <p>サンプル</p> <p>これはサンプルテキストです</p> </div> <!-- サムネイル画像 --> <ul class="sub-img js-sub-img"> <!-- 選択されている画像の枠線を変更 --> <li class="current"> <img src="images/861.svg" alt="" /> </li> <li> <img src="images/864.svg" alt="" /> </li> <li> <img src="images/866.svg" alt="" /> </li> </ul> </div> </div> </div> </div> </main>
/*クリックでタブ変更*/ .tab_wrap{ width:100%; } input[type="radio"]{ display:none; }/*radioボタンのチェックを消す*/ .tab_area{ font-size:0; margin:0 auto; text-align: center; } .tab_area label{ width:120px; margin:5px 5px; display:inline-block; padding:12px 10px; color:#999; background:#FFFFFF; border: solid 1px #B4B4B4; text-align:center; font-size: clamp(0.75rem, 0.9vw, 0.9rem); font-weight: normal; cursor:pointer; transition:ease 0.5s; } @media screen and ( max-width : 700px ){ .tab_area label{ width: 100px; } } .tab_area label:hover{ opacity:0.3; } .panel_area{ background:#fff; margin-top: 10px; } .tab_panel{ width:100%; padding:20px 0; display:none; } .tab_panel img{ width: 100%; align-items: flex-start; } .tab_panel>div{ gap:3%; margin-top: 20px; text-align: center; } .tab_panel>div img{ width: 100%; } .tab_panel>div>p:nth-child(2){ font-size: clamp(0.9rem, 1vw, 1.0rem); letter-spacing:1px; text-align:center; margin-top: 10px; } .tab_panel>div>p:nth-child(3){ margin-top: 10px; } #tab1:checked ~ .tab_area .tab1_label{ background:#D43030; color:#FFFFFF; border: solid 2px #000000; } #tab1:checked ~ .panel_area #panel1{ display:block; } #tab2:checked ~ .tab_area .tab2_label{ background:#D43030; color:#FFFFFF; border: solid 2px #000000; } #tab2:checked ~ .panel_area #panel2{ display:block; } #tab3:checked ~ .tab_area .tab3_label{ background:#D43030; color:#FFFFFF; border: solid 2px #000000; } #tab3:checked ~ .panel_area #panel3{ display:block; } #tab4:checked ~ .tab_area .tab4_label{ background:#D43030; color:#FFFFFF; border: solid 2px #000000; } #tab4:checked ~ .panel_area #panel4{ display:block; } #tab5:checked ~ .tab_area .tab5_label{ background:#D43030; color:#FFFFFF; border: solid 2px #000000; } #tab5:checked ~ .panel_area #panel5{ display:block; } #tab6:checked ~ .tab_area .tab6_label{ background:#D43030; color:#FFFFFF; border: solid 2px #000000; } #tab6:checked ~ .panel_area #panel6{ display:block; } /*クリックで画像を変更*/ /* アクティブな画像の枠線を変更 */ .sub-img li.current img { border: 2px solid #898989; transition: border .5s; } /* レイアウトのためのスタイル */ .container { margin: 50px auto 0; max-width: 500px; } .main-img { width: 100%; } .main-img img { height: auto; width: 100%; } .sub-img { display: flex; margin-top: 18px; } .sub-img li { margin-right: 2%; width: calc(96% / 3); } .sub-img li:nth-child(3n) { margin-right: 0; } .sub-img li img { border: 2px solid transparent; transition: border .5s; } .sub-img img { cursor: pointer; width: 100%; }

javascript

$(function () { $(".js-sub-img img").on("click", function () { // メイン画像に切り替えるimgのsrc取得 img = $(this).attr("src"); // currentクラス付け替え(枠線などを変えたい時に) $(".js-sub-img li").removeClass("current"); $(this).parent().addClass("current"); // fadeOutできたらsrc変更してfadeIn $(".js-main-img img").fadeOut(500, function () { $(".js-main-img img") .attr("src", img) .on("load", function () { $(this).fadeIn(500); }); }); }); });

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

sp1

2022/10/05 08:35

【 発生している問題 】の欄に書いてあることはミスです。すみません。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

HTML5

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

jQuery

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