jQueryで「ページトップへ戻るボタン」を作る手順|Vanilla JSでの実装方法も解説

5 min 24 views
ページトップ ボタン 実装,jQuery

ページの下にスクロールすると ふわっと出てきて、クリックしたら上に戻れるボタン、Webサイトによくありますよね。
今回はその仕組みを HTML / CSS / jQuery の3つで実装します。

(スクールさんではjQueryの実装がまだまだメインのようなので、まずはjQueryで説明。)

その後、Vanilla JS、CSSのみ、UIライブラリやフレームワークの説明をさらっとのせています。

個人的にはVanilla JSをおススメしていますが、どの仕方もさらっとでも把握しておいた方が良いでしょう。

① jQueryを読み込む準備をしよう

jQuery の機能を使いたい場合、必ず本体(jQuery本体ファイル)を読み込む必要があります。

手順

  1. jsフォルダを作る
  2. 中に script.js を作る
  3. </body> タグの直前に jQuery と script.js を読み込む
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="./js/script.js"></script>

✔ ここに置く理由

  • jQueryを読み込むことで script.js 内で jQueryが使える
  • body閉じタグの前に置くことで、HTMLが読み込まれた後にスクリプトが実行され、エラーを防げる

初心者がよくやるミスなので、最初に書いておくのはとても良い判断です!

② ページトップへ戻るボタンのHTML

まずはボタンを用意します。

<button type="button" id="js-button-top" class="button">TOP</button>

✔ id=”js-button-top” → jQueryでこのボタンを操作するための目印
✔ button クラス → ボタンの見た目をCSSで作るため

③ CSSでボタンの見た目を作る

.button {
  display: none;
  position: fixed;
  bottom: 30px;
  right: 30px;
  height: 50px;
  width: 50px;
  background-color: #fff;
  color: #3c301e;
  border: solid 1px #3c301e;
  border-radius: 50%;
  cursor: pointer;
}

.button:hover {
  opacity: 0.7;
}

ひとつずつ意味を整理します👇

✔ display: none;

最初は非表示(スクロールするまで出ない)

✔ position: fixed;

画面に固定表示
(スクロールしても画面の右下にずっとついてくる)

✔ bottom: 30px; right: 30px;

画面右下からの距離

✔ border-radius: 50%;

丸いボタンにする

✔ cursor: pointer;

カーソルを「手の形」に

✔ opacity: 0.7;

ホバーした時に少し透明にして「押せる感」を演出

④ jQueryで動きを付ける(メイン処理)

▼ スクロールしたらボタンを表示・非表示

jQuery(window).scroll(function(){
    if (jQuery(this).scrollTop() > 80){
        jQuery("#js-button-top").fadeIn(300);
    } else {
        jQuery("#js-button-top").fadeOut(300);
    }
})

ここが一番「動いてる感」がある部分です。
ポイントを順番に説明します👇

✔ jQuery(window).scroll(function(){ … })

画面をスクロールした瞬間に、この中の処理が実行される

✔ jQuery(this).scrollTop()

いま画面がどれだけ縦にスクロールされているかを取得
(数値で返ってくる)

例:100pxスクロール → 値は100

✔ if (scrollTop > 80)

80pxよりスクロールしていたら「ボタンを表示」

✔ fadeIn(300) / fadeOut(300)

0.3秒かけてふわっと表示・非表示

CSSの見た目 × jQueryのアニメーションで自然でやさしい挙動になります。

▼ クリックしたらトップに戻る

jQuery("#js-button-top").on("click",function(){
    jQuery("html,body").animate({scrollTop:0},500);
});

✔ on(“click”)

クリックしたときだけ実行される処理

✔ jQuery(“html, body”).animate({scrollTop: 0}, 500);

ページ全体(html + body)を0.5秒かけてスクロール位置0に移動(=トップへ)

jQueryを使うと、なめらかなスクロールが簡単に書けます。

▼ まとめ

1️⃣ HTMLでボタンを作る
2️⃣ CSSでボタンを右下に固定&非表示
3️⃣ jQueryで
 ✔ スクロールしたら表示
 ✔ クリックでトップに戻る

という流れ。

初心者のつまづきポイントが多いですが、整理して読むと

「スクロールを監視 → 条件で表示 → クリックで戻る」
たったこれだけです。

ページトップへ戻るボタンは jQueryがなくても、純粋なJavaScript(Vanilla JS)だけで実装可能です。
むしろ最近のWeb制作では、jQueryを使わない実装の方が主流になりつつあります。

ここでは、代表的な3つの方法を紹介します👇

①【一番おすすめ】純JavaScript(Vanilla JS)で実装する方法

jQueryなしで書くと、こんなにスッキリします。

▼ HTMLは同じ

<button id="js-button-top" class="button">TOP</button>

▼ CSSもそのままでOK

前と同じCSSが使えます。

▼ JavaScript(最小構成)

const topBtn = document.getElementById("js-button-top");

// スクロールで表示・非表示
window.addEventListener("scroll", () => {
  if (window.scrollY > 80) {
    topBtn.style.display = "block";
  } else {
    topBtn.style.display = "none";
  }
});

// クリックでトップへ
topBtn.addEventListener("click", () => {
  window.scrollTo({
    top: 0,
    behavior: "smooth"
  });
});

✔ ポイント

  • window.scrollY
     → 現在のスクロール量を取得
  • style.display = “block” / “none”
     → シンプルな表示・非表示
  • scrollTo({ behavior: “smooth” })
     → ブラウザ標準の「なめらかスクロール」
     (jQueryの animate より軽い!)

jQueryなしでも、十分きれいで軽量なコードになります。

② CSSだけで戻るボタンをスムーズスクロールにする方法

実は、「クリック時のスムーズスクロール」は CSSだけでも可能 です。

▼ CSSにこれを追加

html {
  scroll-behavior: smooth;
}

▼ HTMLでIDをリンクさせる

ページの一番上にIDを付ける。

<body id="top">

ボタンはaタグにする。

<a href="#top" id="js-button-top" class="button">TOP</a>

✔ メリット

  • JavaScriptなしで超軽量
  • サイトの表示速度に優しい
  • モダンブラウザならほぼ対応

✔ デメリット

  • 「80pxスクロールで表示→非表示」などの動的処理は JS が必要
     (CSSだけではスクロール量を判断できない)

③ UIライブラリやフレームワークを使う方法

サイト全体を React / Vue / Next.js / Svelte などで組んでいる場合は、そのフレームワーク特有の書き方で実装するパターンもあります。

▼ Reactの例(Hooks使用)

import { useState, useEffect } from "react";

export default function TopButton() {
  const [show, setShow] = useState(false);

  useEffect(() => {
    const handleScroll = () => {
      setShow(window.scrollY > 80);
    };
    window.addEventListener("scroll", handleScroll);

    return () => window.removeEventListener("scroll", handleScroll);
  }, []);

  return (
    <button
      style={{ display: show ? "block" : "none" }}
      onClick={() => window.scrollTo({ top: 0, behavior: "smooth" })}
      className="button"
    >
      TOP
    </button>
  );
}

React / Vue などで開発している人にとっては、この方が扱いやすいですね。

どの方法が一番おすすめ?

方法特徴おすすめ度
① 純JavaScript最も軽量で、今の主流。jQuery不要⭐⭐⭐⭐⭐
② CSS(scroll-behavior: smooth)最小コード。動きの制御は弱い⭐⭐⭐⭐
③ React / Vue などSPAや大規模サイト向け⭐⭐⭐

結論

これからWeb制作を学ぶなら、jQueryより純JavaScriptの実装を覚える方が、絶対に役に立ちます。

jQueryの役割はどんどん減っており、今後は「Vanilla JSで書ける人」が強いです。

関連記事