JavaScriptで「TOPに戻る」ボタンをスクロールしたら表示する
- 2021.09.11
- 01_技術ブログ JavaScript
- #Javascript
この記事は、 ブログやWEBサイトの右下にある、「TOPに戻る」ボタンを作成した記事です。
※このブログも作成したボタンを表示しています。
デモはこちら↓
デモの中でスクロールすると、右下にふわっと表示されます。
See the Pen TOPへ戻るボタン by dyna (@sakudyna) on CodePen.
考え方
以下の手順で考えます。
1.HTML、CSSでボタンを表示
2.JavaScriptで(ボタン)要素の現在位置を取得
3.画面の上からの要素距離を取得し、〇PX以上なら表示、以下なら非表示と設定
4.スクロールイベントで2.3を行う
ではコードを見ていきます。
HTML,CSSでボタン描画
まずはボタンを書きます。
1 2 3 4 5 6 | <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css"> <div id="page_top"> <a href="#"></a> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #page_top{ width: 90px; height: 90px; position: fixed; right: 10px; bottom: 0; opacity: 0; transition: all 1s ease; } #page_top.show { opacity: 0.6; transform: none; } #page_top a{ position: relative; display: block; width: 90px; height: 90px; text-decoration: none; } #page_top a::before{ font-family: 'Font Awesome 5 Free'; font-weight: 900; content: '\f102'; font-size: 30px; color: #A12568; position: absolute; width: 30px; height: 30px; top: -40px; bottom: 0; right: 0; left: 0; margin: auto; text-align: center; } #page_top a::after{ content: 'TOP'; font-size: 18px; position: absolute; top: 45px; bottom: 0; right: 0; left: 0; margin: auto; text-align: center; color: #A12568; } |
今回、Font AwesomeのWebアイコンフォントを使用します。
HTMLのところで
1 2 3 | <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css"> |
と読み込んでいる部分がアイコンフォント読み込み部分です。
あとはCSSで装飾をします。
アイコンフォントをCSSで記載するときは以下のように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 指定したい要素:before(または :after) { font-family: "Font Awesome 5 Free"; font-weight: 任意の数値; content: '\ユニコード'; } //実際のコード例 #page_top a::before{ font-family: 'Font Awesome 5 Free'; font-weight: 900; content: '\f102'; } |
無事表示がされたら、JSでスクロール位置をとっていきます。
JavaScript
まず全体のコードを載せておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | window.onload=function(){ let Animation = function() { //アイコン位置取得 let pageTop = document.getElementById('page_top'); //要素の位置座標を取得 let rect = pageTop.getBoundingClientRect(); //topからの距離 let scrollTop = rect.top + window.pageYOffset; if(scrollTop > 420){ pageTop.classList.add('show'); } else { pageTop.classList.remove('show'); } } window.addEventListener('scroll', Animation); } |
ここで重要なのは、要素の位置座標の取得と、スクロールされた縦軸の値(量)の取得です。
要素の位置座標の取得
まずはボタン要素の位置を取得します。
let rect = pageTop.getBoundingClientRect(); のコードがその部分です。
getBoundingClientRect・・・
ターゲット要素の位置を
ブラウザの表示領域の左上を(0, 0)として、そこからの相対位置を取得する
参考:
https://developer.mozilla.org/ja/docs/Web/API/Element/getBoundingClientRect
スクロールされた縦軸の値(量)の取得
要素の位置が取得されたので、今度はスクロール量を取得します。
そうすると、
「元の要素の位置 + 〇pxスクロール」の場合、ボタンを表示する、
という書き方ができます。
window.pageYOffset を使用します。
2つを組み合わせる
この2つを組み合わせると、
ボタンを表示
そうでないならば
ボタンを非表示
という形ができます。
実際のコード↓
1 2 3 4 5 6 7 | if(scrollTop > 420){ pageTop.classList.add('show'); } else { pageTop.classList.remove('show'); } |
表示、非表示はCSSの方で制御してるよ。
CSSの表示・非表示はこちらの記事あります↓
あとは、スクロールイベントで、上記の関数を実行するだけでOKです。
こんな感じでできたでしょうか。
ここまで読んで下さりありがとうございます。
<あわせて読みたい>