トップ / 【jQuery】固定されたヘッダーに対応したスムーズスクロールを実装する方法

2019.06.19

【jQuery】固定されたヘッダーに対応したスムーズスクロールを実装する方法

みなさん、こんにちは。

ヘッダーを「position: fixed;」で上部に固定している際にスムーズスクロールすると、固定されているヘッダーの高さの分ずれて、目的地に被さってしまうという経験はありませんか?

そのずれを解消する方法をご紹介します。

Contents

ヘッダーが固定されていない場合

まずはヘッダーが固定されていない場合の記述です。
jQueryを利用するのでjQueryを予め読み込んでおいてください。

js

$(function(){
	$("a.js-scroll").click(function(){
		$('html,body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'slow','swing');
		return false;
	})
});

html

<a href="#a" class="js-scroll">aに移動する</a>

一般的なスムーズスクロールかと思います。
こちらをカスタマイズします。

ヘッダーが固定されている場合

こちらも同じくjQueryを予め読み込んでおいてください。

js

$(function(){
	$("a.js-scroll").click(function(){
		var hd_height = $('.l-header').height();

		$('html,body').animate({ scrollTop: $($(this).attr("href")).offset().top - hd_height }, 'slow','swing');
		return false;
	})
});

※固定しているヘッダーのクラス名を「l-header」としている場合です。

html

<a href="#a" class="js-scroll">aに移動する</a>

追加した処理は以下になります。
アンカーリンクをクリックしたときに、固定されているヘッダーの高さを取得し、スクロール先からヘッダーの高さ分を引いた地点をスクロール先に設定する。

これで目的地に被さらないでスムーズスクロールすることが出来るようになります。

この記事が気に入ったらいいね!で
最新記事をお届けします

記事が気に入ったらシェアしよう