【jQuery】ページ内リンクでスムーズスクロール(固定ヘッダーがあったら)

【jQuery】ページ内リンクでスムーズスクロール(固定ヘッダーがあったら)
きのこさん
するする動くと楽しいですねー
きのこさん
固定ヘッダーがある場合はクラスやIDを指定して高さ調整しちゃいましょう!

JavaScript

固定のヘッダー(ナビ)がある場合はヘッダー分の高さを調整しなければなりません。レスポンシブだと高さが変わってしまいます。そんな時には『ヘッダー』のクラスやIDを指定してあげれば面倒な調整は不要になります。ちなみに今回の『ヘッダー』は『header』を使っています。

jQuery(必須)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

▽簡単な説明を記載しています。

$(function(){
  var headerHeight = $('header').outerHeight(); // ヘッダーについているID、クラス名など、余白を開けたい場合は + 10を追記する。
  var urlHash = location.hash; // ハッシュ値があればページ内スクロール
  if(urlHash) { // 外部リンクからのクリック時
    $('body,html').stop().scrollTop(0); // スクロールを0に戻す
    setTimeout(function(){ // ロード時の処理を待ち、時間差でスクロール実行
      var target = $(urlHash);
      var position = target.offset().top - headerHeight;
      $('body,html').stop().animate({scrollTop:position}, 500); // スクロール速度ミリ秒
    }, 100);
  }
  $('a[href^="#"]').click(function(){ // 通常のクリック時
    var href= $(this).attr("href"); // ページ内リンク先を取得
    var target = $(href);
    var position = target.offset().top - headerHeight;
    $('body,html').stop().animate({scrollTop:position}, 500); // スクロール速度ミリ秒
    return false; // #付与なし、付与したい場合は、true
  });
});

▽JavaScriptには以下の記述でオッケーです。

$(function(){
  var headerHeight = $('header').outerHeight();
  var urlHash = location.hash;
  if(urlHash) {
    $('body,html').stop().scrollTop(0);
    setTimeout(function(){
      var target = $(urlHash);
      var position = target.offset().top - headerHeight;
      $('body,html').stop().animate({scrollTop:position}, 500);
    }, 100);
  }
  $('a[href^="#"]').click(function(){
    var href= $(this).attr("href");
    var target = $(href);
    var position = target.offset().top - headerHeight;
    $('body,html').stop().animate({scrollTop:position}, 500);
    return false;
  });
});

サンプルページはこちら

実装サンプル、ページ内リンクのスクロール(固定ヘッダーがあったら)

▽jquery.min.js(バージョン3.6.0)使用

See the Pen
【jQuery】ページ内リンクでスムーズスクロール(固定ヘッダーがあったら)
by 125naroom (@125naroom)
on CodePen.

サンプルページはこちら

外部リンクからのスクロールでもズレません

外部ページのリンクからでも固定ヘッダーの高さを調整しておきましょう。

サンプルページはこちら

メモ

jQueryのことで何かわからないことがあればjQueryの日本語リファレンスサイトがあるので一度チェックしてみるといろいろ解決できたりしますよ。

jQuery日本語リファレンス

jQuery(英語版)

さいごに

きのこさん
スクロール楽しいですねー
きのこさん
固定ヘッダーがあってもぴったりですー

関連記事

【jQuery】ページ内リンクでスムーズスクロール(スクロール位置の調整も簡単にできる)

【jQuery】プルダウンメニューでページ内リンク

Author

デザコト

あ、いいな、と思うWebデザインを紹介しています。デザインの参考に。やさしいデザインが多いです。Webデザインギャラリー『デザインのこと - Web design gallery』を運営しています。

Googleさんの
おすすめ

4

/

25

2024

Googleさんの
おすすめ

4

/

25

2024

デザインの記事

映画『わたくしどもは。』公式サイト
アオアシ
【jQuery】 ローディング、実装サンプル集