スクロールするとふわっと現れて、フッターにぴたっとくっつく「トップに戻るボタン」のコードです。
特にフッターに情報量が多いサイトだと、ボタンのせいで文字が隠れてしまって読めないことがあるので一定位置まで来ると停止するようにjQueryでCSSを書き換えます。
今回はデモを別ページにしました。
デモページHTML
<header id="top"> <h1>Web Site</h1> </header> <main> <!-- 省略 --> </main> <footer> <div class="btn-top-wrap" id="js-scroll-to-top"> <a href="#top" class="btn-top"></a> </div> <p>©Web Site</p> </footer>
CSS
footer { position: relative; } .btn-top-wrap { position: fixed; right: 50px; bottom: 50px; display: none; } .btn-top-wrap.is-stop { position: absolute; bottom: 150px; } .btn-top { display: flex; align-items: center; justify-content: center; width: 80px; height: 80px; border-radius: 50vh; background-color: #90aaf7; } .btn-top::after { content: ''; width: 30px; height: 30px; margin-top: 15px; border-top: 2px solid #fff; border-right: 2px solid #fff; transform: rotate(315deg); }
jQuery
$(document).ready(function () { const topBtn = $('#js-scroll-to-top'); $(window).on("scroll", function () { let scrollPosition = $(this).scrollTop() + $(window).height(); if (scrollPosition > $(window).height() + 100) { topBtn.fadeIn(); } else { topBtn.fadeOut(); } let footerHeight = $("footer").innerHeight(); if ($(document).height() - scrollPosition <= footerHeight - topBtn.height()) { topBtn.addClass('is-stop'); } else { topBtn.removeClass('is-stop'); } }); topBtn.click(function () { $('body,html').animate({ scrollTop: 0 }, 500); return false; });
このまま使うことはないと思うので、もしアレンジして上手くいかないときはデモページのソースを参考にしていただければと思います。