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

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

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

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

Q&A

0回答

884閲覧

アンカーリンクの位置がファーストビュー時のみズレる

M.Takeshita

総合スコア24

jQuery

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

0グッド

0クリップ

投稿2021/10/08 04:12

編集2021/10/08 04:14

アンカーリンクをブロック毎に設定し、メニューから飛ばしたいのですが、アンカーリンク位置の取得がおかしいのです。

現状の仕様

・calender-date__listのリンクを押すと、同じハッシュタグのあるブロックまで遷移する。
・スクロールすると、ヘッダーとcalender-dateは固定になるため、その高さを差し引いてスクロールする

できていない問題

・一番最初(ファーストビュー)の段階でcalender-date__listをクリックすると、ヘッダーとcalender-date分の高さを越えたところに飛ぶ。
・途中までスクロールした後、リンクをクリックすると、問題なく動作する。

ソース内容から、原因などわかりますでしょうか?
何かヒントいただけると助かります。よろしくお願いします。

html

1<header class="header">メニューなど</header> 2<div class="dread-list">パンくずリストブロック</div> 3 4<main class="page"> 5 6<h1>タイトル</h1> 7 8 9<section> 10 11<div class="calender-date"> 12<div class="date"></div> 13 <ul class="calender-date__list"> 14 <li class="is-current"><a href="#month01">2021.7</a></li> 15 <li><a href="#month02">2021.8</a></li> 16 <li><a href="#month03">2021.9</a></li> 17 </ul> 18</div> 19 20<div class="calender-schedule-month" id="month01"> 21<h2>2021.7</h2> 22<div class="calender-schedule"></div> 23<!-- end .calender-schedule --> 24<div class="calender-schedule"></div> 25<!-- end .calender-schedule --> 26</div> 27<!-- end .calender-schedule-month --> 28 29 30<div class="calender-schedule-month" id="month02"> 31<h2>2021.8</h2> 32<div class="calender-schedule"></div> 33<!-- end .calender-schedule --> 34<div class="calender-schedule"></div> 35<!-- end .calender-schedule --> 36</div> 37<!-- end .calender-schedule-month --> 38 39<div class="calender-schedule-month" id="month03"> 40<h2>2021.9</h2> 41<div class="calender-schedule"></div> 42<!-- end .calender-schedule --> 43<div class="calender-schedule"></div> 44<!-- end .calender-schedule --> 45</div> 46<!-- end .calender-schedule-month --> 47 48 49</div> 50</section> 51</main> 52 53<footer class="footer">フッター</footer>

jquery

1//calender-dateのfixed指定(headerは別途全画面共通でjsで指定) 2$(function(){ 3 var win = $(window); 4 var headH = $('.header').outerHeight(true); 5 var month = $('.calender-date'); 6 var monthPosi = $('.calender-date').offset().top - headH; 7 win.on('scroll',function(){ 8 var scr = win.scrollTop(); 9 if(scr > monthPosi){ 10 month.addClass('is-fixed'); 11 }else{ 12 month.removeClass('is-fixed'); 13 } 14 }); 15}); 16 17//月の切り替え 18$(function(){ 19 $('.calender-date__list li a').click(function(){ 20 var href = $(this).attr('href'); 21 var target = $(href == '#' || href == '' ? 'html' : href ); 22 var headH = $('.header').outerHeight(true), 23 menuH = $('.calender-date').outerHeight(true), 24 sumH = headH + menuH; 25 var position = target.offset().top; 26 console.log(position); 27 $('html, body').animate({scrollTop:position - sumH + 5}, 400, 'swing'); 28 return false; 29 }); 30 var sectionArr = new Array(), 31 elIndex = $('.calender-date__list li a'); 32 for(i=0; i < elIndex.length; i++){ 33 var elLink = elIndex.eq(i).attr('href'); 34 sectionArr[i] = elLink; 35 } 36 $(window).on('load resize scroll', function(){ 37 var top = $(window).scrollTop(); 38 for(i=0; i < sectionArr.length; i++){ 39 var headH = $('.header').outerHeight(true), 40 menuH = $('.calender-date').outerHeight(true), 41 sumH = headH + menuH; 42 var target = sectionArr[i], 43 secTop = $(target).offset().top - sumH, 44 secBottom = secTop + $(target).outerHeight(true); 45 if(secTop <= top && secBottom >= top){ 46 elIndex.parent().removeClass('is-current'); 47 elIndex.eq(i).parent().addClass('is-current'); 48 } 49 } 50 }); 51 52});

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

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

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

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

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

itagagaki

2021/10/08 09:13

問題が再現できないというか、どういう問題なのかがそもそもわからないのですが。 CSSが無いからでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問