Jqueryでスムーススクロール

JavaScriptのライブラリであるjQueryでスムーススクロールを実装する方法を紹介します。

トップへ戻るやページ内リンクなどで利用範囲が広いですね。

目次

  • 通常の書き方
  • スクロール位置を調整
  • 特定のリンクを除外する
  • 特定のリンクを除外する・複数形
  • 特定のリンクを除外する・クラスで指定

通常の書き方

$(function(){
//先頭に#がついたリンクがクリックされたら
 $('a[href^="#"])').click(function(){
//スクロール速度 単位ミリ秒
 var speed = 800;
// アンカーの値取得
 var href= $(this).attr("href");
 var target = $(href == "#" || href == "" ? 'html' : href);
 // 移動先を取得
 var position = target.offset().top;
 $("html, body").animate({scrollTop:position}, speed, "swing");
 return false;
 });
});

これで、#で始まるリンクをクリックすると指定したidの要素までスクロールします。

WordPressだと「$」が競合するので、「$」の部分を「jQuery」にしましょう。
($(function()→jQuery(function())

スクロールする位置を調整

$(function(){
//先頭に#がついたリンクがクリックされたら
 $('a[href^="#"])').click(function(){
//スクロール速度 単位ミリ秒
 var speed = 800;
// アンカーの値取得
 var href= $(this).attr("href");
 var target = $(href == "#" || href == "" ? 'html' : href);
 // 移動先を取得
 var position = target.offset().top - 120; 
 $("html, body").animate({scrollTop:position}, speed, "swing");
 return false;
 });
});

var position = target.offset().top – 120; でスクロールする位置を調整します。
追従するヘッダー等を設定している場合は設定しないと要素が隠れてしまうことがあります。

特定のリンクを除外する

スライダーやドロワーメニュー等が挙動がおかしくなってしまう事があるので、特定のIDを除外する方法も覚えておきましょう。

$(function(){
//先頭に#がついたリンクがクリックされたら
 $('a[href^="#"]:not(a[href="#noscroll"])').click(function(){
//スクロール速度 単位ミリ秒
 var speed = 800;
// アンカーの値取得
 var href= $(this).attr("href");
 var target = $(href == "#" || href == "" ? 'html' : href);
 // 移動先を取得
 var position = target.offset().top;
 $("html, body").animate({scrollTop:position}, speed, "swing");
 return false;
 });
});

:not(a[href=”#noscroll”]を追加する。

この場合、「#noscroll」となっているaタグはスクロール処理しない

特定のリンクを除外する・複数形

$(function(){
//先頭に#がついたリンクがクリックされたら
 $('a[href^="#"]:not(a[href="#noscroll_1"],a[href="#noscroll_2"])').click(function(){
//スクロール速度 単位ミリ秒
 var speed = 800;
// アンカーの値取得
 var href= $(this).attr("href");
 var target = $(href == "#" || href == "" ? 'html' : href);
 // 移動先を取得
 var position = target.offset().top;
 $("html, body").animate({scrollTop:position}, speed, "swing");
 return false;
 });
});

:notに複数条件を設定する。
この方法だと、除外するIDが増えるたびに追加する必要があり、面倒です・・
それで次の方法です。

特定のリンクを除外する・クラスで指定


$(function(){
//先頭に#がついたリンクがクリックされたら
 $('a[href^="#"]:not(a.noscroll))').click(function(){
//スクロール速度 単位ミリ秒
 var speed = 800;
// アンカーの値取得
 var href= $(this).attr("href");
 var target = $(href == "#" || href == "" ? 'html' : href);
 // 移動先を取得
 var position = target.offset().top;
 $("html, body").animate({scrollTop:position}, speed, "swing");
 return false;
 });
});

上記のように:not(a.noscroll)を追加してclass指定してしまえば楽ですね。必要に応じてIDとclass複合的にしてしまってもいいかと思います。

これで自由自在にスクロールできますね。

では、また。

この記事を書いた人

木村 太一

ドットワンの代表です。1979年生まれ。3女の父。ゴルフと筋トレが趣味。立川にあるキヤノン代理店に就職後、1万件以上飛び込み営業したのち独立。たくさんの企業を見てきた経験と自分自身も零細企業の経営者ということを活かし、相手の立場に立ったDX推進、ITコンサルを行っております。

お気軽にお問い合わせください

ホームページ、ネットショップの集客方法から、IT機器や、顧客管理、採用に関することまでご相談ください。
WEBマーケティングのノウハウを生かして、お客様のお悩みを解決します。