前提
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

0 コメント