【JavaScript】トップに戻るボタンの実装方法

どうも、くまだです。

画面下によく見かけるトップに戻るボタンの実装方法。よくあるやつです。

トップに戻るボタンの実装方法

  <div class="conteiner">
    <p>スクロール↓</p>
    <p>↓</p>
    <p>↓</p>
  </div>
  
  <div class="back-to-top" id="page-top">
    <a href=""></a>
  </div>
.conteiner {
  height: 3000px;
}


.back-to-top {
  z-index: 100;
  position: fixed;
  right: 11px;
  bottom: 61px;
  width: 35px;
  height: 35px;
  border: 1px solid #ffffff;
  border-radius: 50%;
  background: red;
  cursor: pointer;
  transition: opacity .4s;
  opacity: 0;

}

.back-to-top a:before {
  position: absolute;
  width: 10px;
  height: 10px;
  transform: rotate(-45deg);
  border-top: solid 2px #ffffff;
  border-right: solid 2px #ffffff;
  content: "";
  transform: rotate(-45deg) translate(-17%, -50%);
  top: 50%;
  left: 50%;
}
document.addEventListener("DOMContentLoaded", function () {
  const pagetop = document.querySelector("#page-top");
  const scrollThreshold = 100;

  function scrollTop() {
    window.scroll({
      top: 0,
      behavior: "smooth",
    });
  }

  function scrollEvent() {
    if (window.scrollY > scrollThreshold) {
      pagetop.style.opacity = "1";
    } else {
      pagetop.style.opacity = "0";
    }
  }
  pagetop.addEventListener("click", scrollTop);
  window.addEventListener("scroll", scrollEvent);
});

初期状態ではトップに戻るボタンは非表示で、少しスクロールしたらふわっと表示。画面トップまで戻ると、トップに戻るボタンが非表示になります。

トップに戻るボタン自体はCSSでスタイルします(本題はJSなのでCSS解説は省略)。

以下の部分で、トップに戻るボタンを取得し変数に格納。あと、いくらスクロールしたらトップに戻るボタンを表示させるのか、というのをscrollThresholdの変数で数字は適当に100に設定。

  const pagetop = document.querySelector("#page-top");
  const scrollThreshold = 100;

以下の部分で、ページトップに戻る関数。top:0でトップにスクロールする位置、behavior: “smooth”でスムーズなスクロールの設定。

  function scrollTop() {
    window.scroll({
      top: 0,
      behavior: "smooth",
    });
  }

スクロールによってトップに戻るボタンの表示、非表示は以下の部分。

  function scrollEvent() {
    if (window.scrollY > scrollThreshold) {
      pagetop.style.opacity = "1";
    } else {
      pagetop.style.opacity = "0";
    }
  }

現在のスクロール位置が、最初に設定したscrollThresholdよりも大きい場合とそうでない場合をif文で処理を分ける。

大きい場合は、pagetop.style.opacity = “1”;でトップに戻るボタンを表示。そうでない場合はpagetop.style.opacity = “0”;で非表示。

あとはそれぞれイベントを以下の部分で登録。

  pagetop.addEventListener("click", scrollTop);
  window.addEventListener("scroll", scrollEvent);

クリックしたらscrollTop関数の処理が発火し、スクロールしたらscrollEvent関数の処理が発火する感じ。

ここまで読んでくださりありがとうございました。

この記事を書いた人