jQueryでスクロールを最上部にするには?

jQueryでスクロールを最上部にするには?

jQueryでスクロールを最上部にするには?

Webページを閲覧していると、ページが長くなり、下の方にスクロールしていくことがあります。 そのような時、ページの最上部へ戻るためのボタンがあると便利です。 jQueryを使えば、簡単にページの最上部へスクロールする機能を実装することができます。

scrollTop()メソッドでスクロール位置を制御

jQueryの`scrollTop()`メソッドは、要素のスクロール位置を取得・設定することができます。 このメソッドを使うことで、ページの最上部へのスムーズなスクロールを実現できます。

スクロール位置の取得

scrollTop()メソッドを引数なしで呼び出すと、現在のスクロール位置を取得できます。 返り値は、要素の上端からスクロールされたピクセル数です。


$(window).scrollTop(); // ウィンドウの現在のスクロール位置を取得

スクロール位置の設定

scrollTop()メソッドの引数にスクロール値を指定することで、スクロール位置を設定することができます。 最上部に移動する場合は引数に`0`を指定します。


// ページの最上部へスクロール
$('html, body').animate({
  scrollTop: 0
}, 500);

上記コードでは、animate()メソッドを使って、0.5秒(500ミリ秒)かけてスムーズにスクロールさせています。

コード例:ページ最上部へ戻るボタン

以下は、ページ最上部へ戻るボタンの実装例です。 ボタンをクリックすると、スムーズにページ最上部へスクロールします。


<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>ページ最上部へ戻るボタン</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <style>
    body {
      height: 2000px; /* デモのため、bodyの高さを大きくしています */
    }
    #page-top-btn {
      display: none;
      position: fixed;
      bottom: 20px;
      right: 20px;
      padding: 10px 20px;
      background-color: #007bff;
      color: #fff;
      cursor: pointer;
    }
  </style>
</head>
<body>

<button id="page-top-btn">ページ最上部へ</button>

<script>
  $(function() {
    // スクロール位置が一定以上になったらボタンを表示
    $(window).scroll(function() {
      if ($(this).scrollTop() > 300) {
        $('#page-top-btn').fadeIn();
      } else {
        $('#page-top-btn').fadeOut();
      }
    });

    // ボタンクリックでページ最上部へスクロール
    $('#page-top-btn').click(function() {
      $('html, body').animate({
        scrollTop: 0
      }, 500);
    });
  });
</script>

</body>
</html>

注意点

  • scrollTop()メソッドは、`html`要素と`body`要素の両方に適用する必要があります。 ブラウザによっては、どちらか一方にしか適用されない場合があります。
  • スムーズなスクロールを実現するために、animate()メソッドを使用することをおすすめします。

参考資料

よくある質問

Q1. スクロール速度を調整するには?

A1. animate()メソッドの第二引数で、スクロールにかける時間をミリ秒単位で指定することで調整できます。 例えば、1秒かけてスクロールさせる場合は `1000` を指定します。

Q2. スクロール時に特定の要素の位置まで移動するには?

A2. 移動したい要素のオフセット位置を取得し、`scrollTop()`メソッドの引数に指定します。 オフセット位置は、offset().topで取得できます。


// 特定の要素までスクロール
var targetOffset = $('#target-element').offset().top;
$('html, body').animate({
  scrollTop: targetOffset
}, 500);

Q3. スクロールイベントを特定の要素に限定するには?

A3. スクロールイベントを設定する要素を、`$(window)` から対象の要素に置き換えます。 例えば、特定の`div`要素にスクロールイベントを設定する場合は、以下のように記述します。


$('#target-div').scroll(function() {
  // スクロール時の処理
});

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