jquery スクロール位置 一番上

【jQuery】ページのトップへ戻るボタンをスムーズに実装する方法まとめ

本記事では、jQueryを使って、ページトップへ戻るボタンを簡単に実装する方法を解説します。初心者の方でも分かりやすいよう、基本的なコードからスムーズなスクロールを実装するテクニックまでご紹介します。

目次

  1. ページトップへ戻るボタンの基本
  2. スムーズなスクロールを実装する
  3. ボタンの表示/非表示を切り替える
  4. 様々なデザインのボタンを作成する
  5. プラグインを使った実装方法

1. ページトップへ戻るボタンの基本

まずは、jQueryを使ってページトップへスクロールする基本的なコード例を紹介します。HTMLにボタンを設置し、jQueryでクリックイベントを設定します。


<button id="page-top">ページトップへ</button>

<script>
  $(function() {
    $('#page-top').click(function() {
      $('html, body').animate({scrollTop: 0}, 'fast');
    });
  });
</script>

上記コードでは、#page-topというIDを持つボタンをクリックすると、$('html, body')に対してanimate()メソッドを実行し、スクロール位置を0(ページトップ)に移動させています。'fast'はスクロール速度を表し、他にも'slow'やミリ秒で指定することも可能です。

また、jQueryを使わずに、href="#top" を使ったHTMLだけのシンプルな実装方法も紹介します。


<a href="#top" id="page-top">ページトップへ</a>

HTMLの開始タグにid="top" を追加する必要があります。


<html id="top"> 

この方法では、クリック時にページトップへのジャンプが即座に行われます。スムーズなスクロールを実装したい場合は、次のセクションで紹介するanimate()メソッドを使用する方法がおすすめです。

2. スムーズなスクロールを実装する

jQueryのanimate()メソッドを使うことで、スムーズなスクロールアニメーションを実装することができます。animate()メソッドには、スクロール速度や easing 関数を指定することができます。


<script>
  $(function() {
    $('#page-top').click(function() {
      $('html, body').animate({scrollTop: 0}, 800, 'easeInOutQuint'); 
    });
  });
</script>

上記のコードでは、スクロール速度を800ミリ秒に設定し、easeInOutQuintという easing 関数を使用しています。 easing 関数を使うことで、より自然で滑らかなスクロールアニメーションを実現することができます。 jQuery UI の easing 関数を利用するには、jQuery UI のライブラリを読み込む必要があります。

easing 関数 効果
linear 一定速度のスクロール
swing 始めと終わりがゆっくりなスクロール
easeInOutQuint 始めと終わりが非常にゆっくりなスクロール

3. ボタンの表示/非表示を切り替える

ページスクロールに合わせて、ページトップへ戻るボタンを表示/非表示にする方法を紹介します。 jQueryのscrollTop()メソッドを使うことで、現在のスクロール位置を取得することができます。


<script>
  $(function() {
    $(window).scroll(function() {
      if ($(this).scrollTop() > 200) { 
        $('#page-top').fadeIn(); 
      } else {
        $('#page-top').fadeOut(); 
      }
    });
  });
</script>

上記のコードでは、ウィンドウのスクロールイベントを検知し、スクロール位置が200px以上になったら#page-topをフェードイン、200px未満になったらフェードアウトさせています。

4. 様々なデザインのボタンを作成する

CSS を使うことで、ページトップへ戻るボタンのデザインを自由にカスタマイズすることができます。例えば、丸いボタンにしたり、背景画像を設定したり、ホバー時のアニメーションを追加したりすることができます。


<style>
  #page-top {
    position: fixed; 
    bottom: 20px; 
    right: 20px; 
    display: none; 
    width: 50px; 
    height: 50px;
    border-radius: 50%; 
    background-color: #3498db; 
    text-align: center;
    line-height: 50px; 
    color: #fff; 
    text-decoration: none; 
    cursor: pointer;
    opacity: 0.8; 
    transition: opacity 0.3s ease;
  }

  #page-top:hover {
    opacity: 1;
  }
</style>

上記は一例であり、CSS を工夫することで、さらに様々なデザインのボタンを作成することができます。 また、Font Awesomeなどのアイコンフォントを利用して、視覚的にわかりやすいボタンを作成することも可能です。

5. プラグインを使った実装方法

jQueryプラグインを使用することで、ページトップへ戻るボタンをより簡単に実装することができます。 ここでは、代表的なプラグインである "jquery.pagetop" を例に紹介します。

jquery.pagetopのダウンロードとドキュメントはこちらです。

  • <a href="https://github.com/yuku-t/jquery.pagetop">GitHub - yuku-t/jquery.pagetop: Smoothly scroll to top plugin with jQuery</a>

プラグインを利用するメリットとしては、以下のような点が挙げられます。

  • 簡単に実装できる
  • 多くの機能があらかじめ用意されている
  • コードの記述量が少なく、メンテナンスしやすい

一方、デメリットとしては、以下のような点が挙げられます。

  • プラグインに依存するため、プラグインの更新が止まってしまうと、セキュリティ上のリスクや、他のライブラリとの競合が発生する可能性がある
  • 必要な機能だけを実装したい場合、プラグインのコードが冗長になってしまう可能性がある

プラグインの利用は、これらのメリットとデメリットを比較検討した上で、最終的に判断するようにしましょう。

QA

**Q1: スクロール速度を調整するにはどうすればよいですか?**

**A1:** animate() メソッドの第二引数にミリ秒単位でスクロール時間を指定することで調整できます。例えば、500ミリ秒でスクロールさせたい場合は $('html, body').animate({scrollTop: 0}, 500); となります。

**Q2: ページトップへ戻るボタンをクリックしたら、特定の要素の位置までスクロールさせたい場合はどうすればよいですか?**

**A2:** scrollTop: 0 の部分を、スクロール先の要素の offset().top の値に置き換えます。例えば、#target-section というIDを持つ要素にスクロールさせたい場合は、 $('html, body').animate({scrollTop: $('#target-section').offset().top}, 500); となります。

**Q3: ボタンのデザインを画像にしたい場合はどうすればよいですか?**

**A3:** CSSのbackground-imageプロパティを使って画像を設定します。例えば、background-image: url('images/page-top.png'); のように指定します。

その他の参考記事:jquery スクロール 位置