どうして良いか検索キーワードもわからなくなったので、何かヒントをお願いします。
作りたいもの
完全に同じではないのですが、任天堂の発売スケジュールのようなページを作成したいのですが、詰んでおります。
参考リンク:任天堂/発売スケジュール
上部に年月のリスト、サイドに発売日と曜日という構成で、スクロール時に追従型に変更するclassを追加したいです。
html
1<section class="calender-list"> 2 3<div class="calender-area"> 4 5<div class="calender-date"> 6 <ul> 7 <li class="current"><a href="#month01">2021.7</a></li> 8 <li><a href="#month02">2021.8</a></li> 9 <li><a href="#month03">2021.9</a></li> 10 <li><a href="#month04">2021.10</a></li> 11 <li><a href="#month05">2022.4</a></li> 12 </ul> 13</div> 14 15<div class="calender-schedule-month" id="month01"> 16<div class="calender-schedule"> 17 <div class="schedule-date"> 18 <div class="schedule-date__in"> 19 <p class="schedule-date__number">2</p> 20 <p class="schedule-date__day">水曜日</p> 21 </div> 22 </div> 23 <div class="schedule-list"> 24 <div class="schedule-list-box">内容省略</div> 25 <div class="schedule-list-box">内容省略</div> 26 </div> 27 28</div> 29<!-- end .calender-schedule --> 30 31<div class="calender-schedule"> 32 <div class="schedule-date"> 33 <div class="schedule-date__in"> 34 <p class="schedule-date__number">3</p> 35 <p class="schedule-date__day">木曜日</p> 36 </div> 37 </div> 38 <div class="schedule-list"> 39 <div class="schedule-list-box">内容省略</div> 40 <div class="schedule-list-box">内容省略</div> 41 </div> 42</div> 43<!-- end .calender-schedule --> 44 45<div class="calender-schedule"> 46 <div class="schedule-date"> 47 <div class="schedule-date__in"> 48 <p class="schedule-date__number">4</p> 49 <p class="schedule-date__day">金曜日</p> 50 </div> 51 </div> 52 <div class="schedule-list-box">内容省略</div> 53</div> 54<!-- end .calender-schedule --> 55 56</div> 57<!-- end .calender-schedule-month --> 58 59 60<div class="calender-schedule-month" id="month02"> 61<div class="calender-schedule"> 62 <div class="schedule-date"> 63 <div class="schedule-date__in"> 64 <p class="schedule-date__number">2</p> 65 <p class="schedule-date__day">水曜日</p> 66 </div> 67 </div> 68 <div class="schedule-list"> 69 <div class="schedule-list-box">内容省略</div> 70 <div class="schedule-list-box">内容省略</div> 71 </div> 72 73</div> 74<!-- end .calender-schedule --> 75 76<div class="calender-schedule"> 77 <div class="schedule-date"> 78 <div class="schedule-date__in"> 79 <p class="schedule-date__number">3</p> 80 <p class="schedule-date__day">木曜日</p> 81 </div> 82 </div> 83 <div class="schedule-list"> 84 <div class="schedule-list-box">内容省略</div> 85 <div class="schedule-list-box">内容省略</div> 86 </div> 87</div> 88<!-- end .calender-schedule --> 89 90<div class="calender-schedule"> 91 <div class="schedule-date"> 92 <div class="schedule-date__in"> 93 <p class="schedule-date__number">4</p> 94 <p class="schedule-date__day">金曜日</p> 95 </div> 96 </div> 97 <div class="schedule-list-box">内容省略</div> 98</div> 99<!-- end .calender-schedule --> 100 101</div> 102<!-- end .calender-schedule-month --> 103 104</div> 105 106 107</section>
css
1.calender-date.is-fixed{ 2 position:fixed; 3 top:0; 4 left: 0; 5 right:0; 6 z-index:99; 7 } 8.calender-date.current{font-weight:bold;} 9 10.calender-schedule .schedule-date{ 11 width:20%; 12 height:100%; 13 max-width:85px; 14 position:absolute; 15 display:block; 16} 17.calender-schedule .schedule-date.is-fixed{ 18position:fixed; 19 top:30px; 20 z-index:99; 21}
js
1$(function(){ 2 var win = $(window); 3 var month = $('.calender-date'); 4 var monthPosi = $('.calender-date').offset().top; 5 win.on('scroll',function(){ 6 var scr = win.scrollTop(); 7 if(scr > monthPosi){ 8 month.addClass('is-fixed'); 9 }else{ 10 month.removeClass('is-fixed'); 11 } 12 }); 13}); 14 15$(function(){ 16 var win = $(window); 17 win.on('scroll',function(){ 18 $('.calender-schedule').each(function(index){ 19 var scr = win.scrollTop(); 20 var dayPosi = $(this).offset().top; 21 var endPosi = $(this).next().offset().top; ←ここにエラーが出ているのですが、何が問題になりますか? 22 if(scr > dayPosi && scr < endPosi){ 23 $(this).children('.schedule-date').addClass('is-fixed'); 24 }else{ 25 $(this).children('.schedule-date').removeClass('is-fixed'); 26 } 27 }); 28}); 29});
jqueryは色々なサイトを見ながら書いたのですが、機能しているのは一部のみです。
上記でできていること
・スクロールし、月表示のリストを追従させる
・そのまま日付も一緒に追従にする
・次の日付ブロックが来たら次の日付のみが追従する
できていないこと
・月が変わるブロックに入ると(.calender-schedule-month)、日付追従ができない
・最後の日付(.calender-date codeだと4日金曜日)に追従させるためのclassが追加できていない
ソースの内容へのご指摘、検索方法など、なんでも良いのでヒントをいただけると大変助かります。
よろしくお願いします。
あなたの回答
tips
プレビュー