web-wizardry

インターネット・スマホ、そしてテレビにwebの魔法をWizardry

jQueryでページ内リンクをスクロール付きで実装

2018年01月15日 · jQuery

ページ内リンクはみなさんはどのようにして作られておりますか?
1つ1つ制御する方法もありですし、プラグインを利用してリンクを制御させる方法もあると思います。
今回はプラグインを利用しないで、簡単にページ内リンクをスクロール付きで実装する方法についてご説明します

ページ内リンクで色々と書かれております。
代表的な例からその動作を説明しながら作成をしていきます。

表示用の画面作成

まずはhtmlで表示用の画面を作成します
今回は「nav」内にリンクとページ遷移先の枠を用意しておく作りとなっております
リンクはそれぞれ、「#test」の後に番号を入れ、ページ遷移先のdivにid「test番号」と設定をしました。

<nav>
  <ul id="nav" class="clearfix">
    <li><a href="#test1">テスト1</a></li>
    <li><a href="#test2">テスト2</a></li>
    <li><a href="#test3">テスト3</a></li>
    <li><a href="#test4">テスト4</a></li>
  </ul>
</nav>
<div id="test1" class="area"><p>test1</p><a href="#nav">上に戻る</a></div>
<div id="test2" class="area"><p>test2</p><a href="#nav">上に戻る</a></div>
<div id="test3" class="area"><p>test3</p><a href="#nav">上に戻る</a></div>
<div id="test4" class="area"><p>test4</p><a href="#nav">上に戻る</a></div>

表示用のCSSです
「nav」をメニューぽく見せる用意と、スクロールさせる為に「div」に高さを入れました

#nav {
  margin-bottom:10px;
}
#nav li{
  float:left;
  margin-right:10px;
}
.area {
  border-top:1px solid #333;
  width:100%;
  height:500px;
}
.clearfix::after{
  content: "";
  display: block;
  clear: both;
}

動作部分のjQueryを作成

動作部分のjQueryになります。

$(function(){
  $('a[href^="#"]').click(function() {
    var href = $(this).attr("href");
    var target = $(href == "#" || href == "" ? 'html' : href);
    var position = target.offset().top;
    $('body,html').animate({scrollTop:position}, position, 'swing');
    return false;
  });
});

一つずつ解説していきます
「$(‘a[href^=”#”]’).click(function() {」では
hrefに#のあるaタグをクリックしたら中の内容を起動させます
通常リンクでは動作しない設定となっております

「var href = $(this).attr(“href”);」では
クリックしたaタグ(this)のhrefの内容を変数「href」に格納

「var target = $(href == “#” || href == “” ? ‘html’ : href);」では
先ほど取得したhrefの内容がページ遷移先の要素にあるかどうかを確認し、
あれば遷移先の要素を取得し「target」にデータを格納

「var position = target.offset().top;」では
「offset().top」では遷移先がブラウザトップからの表示位置を取得し「position」に格納

「$(‘body,html’).animate({scrollTop:position}, position, ‘swing’);」では
スクロールする指示になっております。
「{scrollTop:position}」で、どこまでスクロールするかを指定しております
「, position」ではスクロールの時間を指定
今回はどの距離でも一定の時間で動作させる為、距離と時間を同じ変数を利用しております。
他のサイトではspeed変数を作り「500」等の数字指定がされておりました。
「’swing’」はjQueryのanimateで持つ動作パターンの1つです
デフォルトでは3種類が用意されております「easing」 、「linear」 、「swing」となります。

「return false;」では
aタグの機能をOFFにしたい為に最後に「return false」を指定しておきます。
こちらの機能がないとURLにクリックしたhrefの内容が後ろに追加されたりします。
動作に予期せぬ不具合がでる場合もあるので「return false;」を入れておくことが無難でしょう

実際の動作を見てみる

実際の動作を見てみましょう

See the Pen Scroll page link by web-wizardry (@web-wizardry) on CodePen.


調べてみると色々なやり方が存在しますので、皆さんも調べてみて自身にあうやり方を見つけてください


Page top