スクロールすると表示されるトップに戻るボタンを作成しました。
anime.jsを使ってスムーズスクロールも実装しています。必須ではないので、不要でしたらボタンのクリックイベントを削除してもらえればOKです。
※ソース上ではanime.jsの読み込み部分は省略しています。
See the Pen トップに戻るボタンとスムーズスクロール by jun (@zionboogie) on CodePen.
レスポンシブにも対応しているのでよければ使ってください。
HTML
<a href="#top" id="btn-backtotop"><span class="arrow arrow_up"></span></a>
CSS
/* ======================================================== 矢印アイコン =========================================================*/ .arrow { position: relative; display: inline-block; padding: 0 0 0 16px; color: #000; vertical-align: middle; text-decoration: none; &::after, &::before { position: absolute; content: ""; top: 0; bottom: 0; left: 0; margin: auto; vertical-align: middle; } } // 上矢印 .arrow_down::before, .arrow_up::before { top: auto; left: auto; bottom: 8px; width: 10px; height: 10px; border-top: 3px solid #fff; border-right: 3px solid #fff; transform: rotate(-45deg); } /* ======================================================== ページトップに戻るボタン =========================================================*/ #btn-backtotop{ position: fixed; bottom: 30px; right: 30px; z-index: 1000; transition: all 1s ease-out; transition: bottom 0.2s ease-out; opacity: 0; @media screen and (max-width:767px){ bottom: 10px; right: 5px; } // スクロール時にJSから付与されるクラス &.fadein{ opacity: 1; } // ホバー時の挙動 &:hover{ opacity: .8; bottom: 34px; @media screen and (max-width:767px){ bottom: 10px; } &::after{ box-shadow: 6px 6px 10px 0px rgba(0, 0, 0, 0.4); @media screen and (max-width:767px){ box-shadow: none; } } } // ボタンのベース &::after{ content: ""; display: block; color: #fff; text-align: center; width: 80px; height: 80px; padding: 4px; border-radius: 8px; background-color: #000; transition: all .3s; transform: scale(0.8) rotate(45deg); transition: background-color 0.5s ease-out; @media screen and (max-width:767px){ width: 40px; height: 40px; } } // 矢印マーク .arrow{ top: 72px; left: 13px; @media screen and (max-width:767px){ top: 46px; left: -1px; } &::before{ width: 20px; height: 20px; z-index: 1; @media screen and (max-width:767px){ width: 10px; height: 10px; } } } }
JavaScript
// anime.js利用 /* ======================================================== スクロールでトップに戻るボタンを表示 =========================================================*/ // スクロールして何ピクセルでアニメーションさせるか var px_change = 1; // スクロールのイベントハンドラを登録 window.addEventListener('scroll', function(e) { // 変化するポイントまでスクロールしたらクラスを追加 var scrollTop = window.pageYOffset || document.documentElement.scrollTop; if ( scrollTop > px_change ) { document.getElementById( "btn-backtotop" ).classList.add( "fadein" ); // 変化するポイント以前であればクラスを削除 } else { document.getElementById( "btn-backtotop" ).classList.remove( "fadein" ); } }); /* ======================================================== トップに戻るボタンのスムーズスクロール =========================================================*/ document.getElementById( "btn-backtotop" ).addEventListener('click', function(e) { anime.remove("html, body"); anime({ targets: "html, body", scrollTop: 0, dulation: 600, easing: 'easeOutCubic', }); return false; });