【jQuery】位置も自動で調整しよう :
スムーズスクロールを実装

どうも皆さん、ナカトミツヨシ(@meganetosake)です。jQueryを使ったスムーズスクロール、いつも使うのに、いつも探してしまうので自分用のメモ。

さらに、ヘッダーが固定されていてスクロール位置をずらす必要があるケースも多々あります。今回は固定値・変数問わず位置をずらすことも可能なコードをご紹介いたします。

まずはお決まり、jQueryを読み込みましょう。

<script src="//code.jquery.com/jquery-3.5.1.min.js"></script>

そして、Javascriptを記述します。

$(function(){
  // #で始まるリンクをクリックした場合
  $('a[href^="#"]').click(function(){
    // 移動先の調整 例えば「100」にすると100ピクセルずらして移動します マイナスの値も可能
    var adjust = 0;
    // スクロールの速度(ミリ秒)
    var speed = 400;
    // リンク先を取得してhrefという変数に代入
    var href= $(this).attr("href");
    // リンク先にidがある場合ターゲットとして値を取得
    var target = $(href == "#" || href == "" ? 'html' : href);
    // ターゲットの位置を取得し、調整がある場合は位置の調整を行う
    var position = target.offset().top + adjust;
    // スクロール実行
    $('body,html').animate({scrollTop:position}, speed, 'swing');
    return false;
  });
});

これで「#」から始まるページ内リンクのみ、jQueryを使ってスムーズスクロールをするようになりました。スクロール速度が遅いなと感じる場合は、var speed = 400; の値を変更してみてください。値を小さくすると素早く動くようになりますが、速すぎると情緒がなくなっちゃう可能性があるので、お好みで調整してみてください。

スクロール位置の調整も可能です

例えばh2タイトルへのスムーズスクロールを行なった場合、何も設定しないとh2タイトル真上に移動します。ちょっと詰まっているなと感じる場合もあるでしょう。そんな時は、スクロールの位置を調整してズラしてあげるとスッキリするかもしれません。

var adjust = 0; に数字を入れると、位置の調整が可能です。例えば var adjust = 100; と入力すると、100ピクセル位置をずらして移動ができます。マイナスも値も可能。

また adjust には変数を入れることもできます。例えばposition:fix;で固定されているヘッダーがある場合、jQueryでスムーズスクロールを行うとヘッダーが被ってしまいコンテンツが隠れてしまいます。先程のように固定値で位置調整してズラすのも手ですが、パソコン版とスマホ版で高さが変わってしまうこともあるかもしれません。そこで、ヘッダーの高さを取得してきて、adjust に指定して位置調整をしてあげると、固定したヘッダー下に移動先が隠れず綺麗にスクロールします。

$(function(){
  // #で始まるリンクをクリックした場合
  $('a[href^="#"]').click(function(){
    // 例えばヘッダーの高さを事前に取得
    var h = $('.header').outerHeight(); // 追加
    // adjust に代入するとヘッダーの高さを取得してズラせる。
    var adjust = h; // 変更
    // スクロールの速度(ミリ秒)
    var speed = 400;
    // リンク先を取得してhrefという変数に代入
    var href= $(this).attr("href");
    // リンク先にidがある場合ターゲットとして値を取得
    var target = $(href == "#" || href == "" ? 'html' : href);
    // ターゲットの位置を取得し、調整がある場合は位置の調整を行う
    var position = target.offset().top + adjust;
    // スクロール実行
    $('body,html').animate({scrollTop:position}, speed, 'swing');
    return false;
  });
});

こうすることで、ヘッダーの高さを毎回取得して位置調整を行なった上でスムーズスクロールができます。例えばこのままだとヘッダーの真下にタイトルがスムーズスクロールしてくるので、先の例のようにちょっと余白を開けて余裕を持たせたい場合は var adjust = h + 100; のように、取得してきた値に、さらに値を追加することでちょっとズラす位置調整も可能です。

ぜひご参考までに!

更新日 :2021.08.24
get_template_part()で変数を渡す方法【WordPress5.5以上対応】
get_template_part()で変数を渡す方法【WordPress5.5以上対応】
TOPへ戻る

人気記事

回さず片手で開けられる、ビール用のグラウラーにも使える、こんな水筒を探してた : REVOMAX2

回さず片手で開けられる、ビール用のグラウラーにも使える、こんな水筒を探してた : REVOMAX2

よかったモノ / 食器
#水筒 #レビュー
カッコ良すぎて隠すどころか飾りたくなる電源タップ : Fargo STEEL TAP USB

カッコ良すぎて隠すどころか飾りたくなる電源タップ : Fargo STEEL TAP USB

よかったモノ / インテリア
#Fargo #USB #電源タップ #レビュー
吟味された原料と製法がつむぐ、旨みとふくよかなコク : サッポロ ヱビスビール

吟味された原料と製法がつむぐ、旨みとふくよかなコク : サッポロ ヱビスビール

美味しかったモノ / お酒
#ピルスナー #サッポロビール #ビール #ヱビスビール #レビュー
音声はもちろん単独でWifiに繋がって色まで変えられるすごいやつ : スマートLED電球 Tapo L530E

音声はもちろん単独でWifiに繋がって色まで変えられるすごいやつ : スマートLED電球 Tapo L530E

よかったモノ / ガジェット
#Tapo #スマート家電 #レビュー
007史上最高傑作で流した、私の涙の理由 : 映画『007 ノー・タイム・トゥ・ダイ』

007史上最高傑作で流した、私の涙の理由 : 映画『007 ノー・タイム・トゥ・ダイ』

面白かったモノ / 映画
#007 #アクション #映画 #レビュー
自立して可愛いし、転がらず大風量 : Japan Hobby Tool カメラ用ロケットブロワー

自立して可愛いし、転がらず大風量 : Japan Hobby Tool カメラ用ロケットブロワー

よかったモノ / カメラ / 撮影機材
#ブロワー #カメラ #レビュー
CATEGORY
HAS TAG
  1. ホーム
  2. デザイン・仕事のコト
  3. 技術ブログ
  4. 【jQuery】位置も自動で調整しよう : スムーズスクロールを実装