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

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

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

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

Q&A

0回答

699閲覧

同じ名前のブロック毎にスクロール時のアクションを追加したい

M.Takeshita

総合スコア24

jQuery

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

0グッド

1クリップ

投稿2021/09/30 09:13

どうして良いか検索キーワードもわからなくなったので、何かヒントをお願いします。

作りたいもの

完全に同じではないのですが、任天堂の発売スケジュールのようなページを作成したいのですが、詰んでおります。
参考リンク:任天堂/発売スケジュール

上部に年月のリスト、サイドに発売日と曜日という構成で、スクロール時に追従型に変更する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が追加できていない

ソースの内容へのご指摘、検索方法など、なんでも良いのでヒントをいただけると大変助かります。
よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

M.Takeshita

2021/09/30 10:29

参考リンクありがとうございます!使える箇所があるか、見てみます! 月の表示の方は、いただいたリンクのscrollspyができるところを目指したいです! でも記述したjsにはまだそこまで到達できておらず。。 参考リンクの任天堂のページでいう、日付の部分もこれらと同じような考え方になるのでしょうか...?
m.ts10806

2021/09/30 10:32

pushpinのほうに近いと思います。 「ここからここまでは青ね」というエリアを指定してるので。 提示したのはCSSフレームワークなので、全部自前でやるのではなくこちらをとりあえず取り入れて改修するのはありとは思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問