###前提・実現したいこと
slick.jsのスライダーを内包したタブメニューを作成しています。
レスポンシブで、各タブの要素の高さが可変するのですが、
①タブの切り替えに合わせてコンテンツの高さを取得したいです。
また上下にタブを設置しているので、
②上下のタブのactiveクラスを連動させたいです。
→②は解決できました。
どなたか分かる方がいらっしゃいましたら、ご教授よろしくお願いします。
###発生している問題・エラーメッセージ
①タブを切り替えても、最初に表示されているタブコンテンツの高さが保持されてしまう。
②色々試したものの、結局できませんでした。orz
→②は解決できました。
###該当のソースコード
HTML
1<div class="standardMenu"> 2 <ul id="tabMenu" class="cf"> 3 <li><a class="tabActive" href="#page01">tab01</a></li> 4 <li><a href="#page02">tab02</a></li> 5 <li><a href="#page03">tab03</a></li> 6 <li><a href="#page04">tab04</a></li> 7 </ul> 8</div> 9 10<div id="tabContent"> 11 <div id="page01" class="mainBodyBox tabBox"><!--★コンテンツ01--> 12 <h4>ここはtab01コンテンツです。</h4> 13 <h5 id="page01_1">小見出し小見出し小見出し小見出し</h5> 14 <div class="contentsSlider"> 15 <div class="contentsSlider_slide slide_01"> 16 <div><img src="images/dummy01.jpg" /></div> 17 <div><img src="images/dummy02.jpg" /></div> 18 <div><img src="images/dummy03.jpg" /></div> 19 <div><img src="images/dummy04.jpg" /></div> 20 </div> 21 <div class="contentsSlider_thum thum_01"> 22 <div><img src="images/dummy01.jpg" /></div> 23 <div><img src="images/dummy02.jpg" /></div> 24 <div><img src="images/dummy03.jpg" /></div> 25 <div><img src="images/dummy04.jpg" /></div> 26 </div> 27 </div> 28 <p class="txt">ダミーテキスト。このテキストはダミーです。ダミーテキスト。このテキストはダミーです。ダミーテキスト。このテキストはダミーです。</p> 29 </div> 30 <div id="page02" class="mainBodyBox tabBox"><!--★コンテンツ02--> 31 <h4>ここはtab02コンテンツです。</h4> 32 <h5 id="page02_1">小見出し小見出し小見出し小見出し</h5> 33 <div class="contentsSlider"> 34 <div class="contentsSlider_slide slide_02"> 35 <div><img src="images/dummy01.jpg" /></div> 36 <div><img src="images/dummy02.jpg" /></div> 37 <div><img src="images/dummy03.jpg" /></div> 38 <div><img src="images/dummy04.jpg" /></div> 39 </div> 40 <div class="contentsSlider_thum thum_02"> 41 <div><img src="images/dummy01.jpg" /></div> 42 <div><img src="images/dummy02.jpg" /></div> 43 <div><img src="images/dummy03.jpg" /></div> 44 <div><img src="images/dummy04.jpg" /></div> 45 </div> 46 </div> 47 <p class="txt">ダミーテキスト。このテキストはダミーです。ダミーテキスト。このテキストはダミーです。ダミーテキスト。このテキストはダミーです。</p> 48 <h5 id="page02_2">小見出し小見出し小見出し小見出し</h5> 49 <div class="contentsSlider"> 50 <div class="contentsSlider_slide slide_03"> 51 <div><img src="images/dummy01.jpg" /></div> 52 <div><img src="images/dummy02.jpg" /></div> 53 <div><img src="images/dummy03.jpg" /></div> 54 <div><img src="images/dummy04.jpg" /></div> 55 </div> 56 <div class="contentsSlider_thum thum_03"> 57 <div><img src="images/dummy01.jpg" /></div> 58 <div><img src="images/dummy02.jpg" /></div> 59 <div><img src="images/dummy03.jpg" /></div> 60 <div><img src="images/dummy04.jpg" /></div> 61 </div> 62 </div> 63 <p class="txt">ダミーテキスト。このテキストはダミーです。ダミーテキスト。このテキストはダミーです。ダミーテキスト。このテキストはダミーです。</p> 64 </div> 65 </div> 66 <!--以下、★コンテンツ03、★コンテンツ04が続く。(それぞれ複数のslickスライダーを内包し、要素の高さが違う。)--> 67</div><!--/#tabContent--> 68 69<div id="tabMenu_bottom" class="standardMenu"> 70 <ul id="tabMenu" class="cf"> 71 <li><a class="tabActive" href="#page01">tab01</a></li> 72 <li><a href="#page02">tab02</a></li> 73 <li><a href="#page03">tab03</a></li> 74 <li><a href="#page04">tab04</a></li> 75 </ul> 76</div> 77
javascript
1//タブ 2$(function(){ 3 $(window).on('load resize', function(){ 4 5 var w = window.innerWidth ? window.innerWidth: $(window).width(); 6 var x = 767; 7 var tabContent_01 = $("#tabContent #page01").outerHeight(); 8 var tabContent_02 = $("#tabContent #page02").outerHeight(); 9 var tabContent_03 = $("#tabContent #page03").outerHeight(); 10 var tabContent_04 = $("#tabContent #page04").outerHeight(); 11 var tabContent = $("#tabContent .tabBox:visible").outerHeight(); 12 13 if (w <= x) {//ウィンドウサイズが767px以下の場合(SP) 14 $("#tabContent #page01").css("height", tabContent_01); 15 $("#tabContent #page02").css("height", tabContent_02); 16 $("#tabContent #page03").css("height", tabContent_03); 17 $("#tabContent #page04").css("height", tabContent_04); 18 $("#tabContent").css("height", tabContent);//■1 19 20 $(function() { 21 $('#tabMenu li a').on('click',function(){ 22 $("#tabMenu li a").removeClass("tabActive"); 23 $(this).addClass("tabActive"); 24 $(".tabBox").css("visibility", "hidden");//■2 25 $(".tabBox").css("height", "0px"); 26 $($(this).attr("href")).css("visibility", "visible"); 27 $($(this).attr("href")).css("height", "auto"); 28 $("#tabContent").css("height", tabContent);//■3 29 return false; 30 }); 31 }) 32 } 33 }); 34}); 35 36//スライダーslick.js 37$('.slide_01').slick({ 38 slidesToShow: 1, 39 slidesToScroll: 1, 40 arrows: false, 41 fade: true, 42 asNavFor: '.thum_01' 43}); 44$('.thum_01').slick({ 45 slidesToShow: 4, 46 slidesToScroll: 1, 47 dots: false, 48 focusOnSelect: true, 49 asNavFor: '.slide_01' 50}); 51//以下、スライダーが複数続きます。
CSS
1/*タブ*/ 2#tabMenu { position: relative; width: 100%; overflow: hidden; height: 40px;} 3#tabMenu li { position: absolute; bottom: 0; float: left; width: 25%;} 4#tabMenu li a { display: block; height: 30px; color: #fff; font-size: 11px; text-align: center; line-height: 30px; background-color: rgba(153,119,38,0.5); border-right: 1px solid #fff;} 5#tabMenu li:last-child a { border-right: none;} 6#tabMenu li:first-child { left: 0;} 7#tabMenu li:nth-child(2) { left: 25%;} 8#tabMenu li:nth-child(3) { right: 25%;} 9#tabMenu li:last-child { right: 0;} 10#tabMenu li .tabActive { height: 40px; color: #997726; line-height: 40px; background-color: #fff; border: 1px solid #997726; border-right: 1px solid #997726 !important; border-bottom: none;} 11#tabMenu_bottom ul { height: 30px;} 12#tabMenu_bottom ul li { height: 30px;} 13#tabMenu_bottom ul li a { height: 30px;} 14#tabMenu_bottom ul li .tabActive { height: 30px; line-height: 30px; border: 1px solid #997726; border-bottom: 1px solid #997726 !important;} 15/*tabContent*/ 16#tabContent { position: relative; width: 100%;} 17#tabContent .tabBox { position: absolute; top: 0; width: 100%;} 18
###試したこと
タブコンテンツの中にスライダーが入っているので、
通常のhideやdisplay:noneでのタブが実装できない。
(そうするとタブを切り替えた時にスライダーが表示されない)
なので、なんとかスライダーの高さを維持したまま、visibilityで処理している。(■2)
■1で#tabContentの初期の高さを取得しているのを、
■3で切り替わったコンテンツの高さに合わせて高さを更新したいつもり。
が、まったく動いていないのでずっと初期の高さが保持されてしまっている状態です。
activeクラスの上下タブ連動に関しては手付かずの状態です。
→上下タブ連動は解決できました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。