jQueryで作るスムーススクロール機能付きのページトップに戻るボタンの作り方を紹介します。
ページトップに戻るボタンはWebサイトにほぼ必須の機能とも言えるので、ぜひ実装してみてください。
スムーススクロール機能付きのページトップに戻るボタンのサンプルコード
HTML
<header class="header"></header>
<div class="main">
<div class="mainvisual"></div>
<div class="contents"></div>
<div class="btn-top"><span></span></div>
</div>
<footer class="footer"></footer>
ヘッダーエリアの下にメインビジュアルがあり、その下にコンテンツ、一番下にフッターがあるイメージです。
CSS
.main {
position: relative;
}
.btn-top {
position: fixed;
right: 30px;
bottom: 30px;
background: rgba(204,204,204,0.8);
border-radius: 50%;
width: 50px;
height: 50px;
}
.btn-top span {
position: relative;
display: block;
width: 50px;
height: 50px;
cursor: pointer;
}
.btn-top span::before {
content: "";
display: block;
position: absolute;
top: 20px;
left: 0;
right: 0;
margin: auto;
width: 18px;
height: 18px;
border-top: 4px solid #ffffff;
border-left: 4px solid #ffffff;
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
疑似要素の.btn-top span::beforeで、ボタンの見た目を設定しています。
サイトに合わせてお好みで調整してください。
jQuery
$(document).ready(function() {
$(".btn-top").hide(); // 初期位置ではボタンを非表示
$(window).on("scroll", function() {
// ある程度スクロールしたらボタンを表示
if ($(this).scrollTop() > 100) {
$(".btn-top").fadeIn("fast");
} else {
$(".btn-top").fadeOut("fast");
}
scrollHeight = $(document).height();
scrollPosition = $(window).height() + $(window).scrollTop();
footHeight = $(".footer").innerHeight();
// フッターエリアまでスクロールしたらボタンを固定
if ( scrollHeight - scrollPosition <= footHeight ) {
$(".btn-top").css({
"position":"absolute",
});
} else {
$(".btn-top").css({
"position":"fixed",
"bottom": "20px"
});
}
});
$('.btn-top').click(function () {
$('body,html').animate({
scrollTop: 0
}, 800); // スクロール速度
return false;
});
});
初期位置にトップに戻るを表示する意味はないので、ある程度スクロールするまでは非表示にしておきます。
また、フッターエリアに到達したらボタン位置が追従から固定に変化します。そうすることで、ボタンがフッターに重ならないように配慮しています。
サンプル
See the Pen
jQueryで作るスムーススクロール機能付きのページトップに戻るボタン by ゆるゆる日和 (@yuruyurubiyori1)
on CodePen.
初期位置ではボタンは非表示で、ある程度スクロールすると右下にニュッっと出現します。
そのままスクロールしていき、フッターエリアまで到達すると位置が固定されます。
ボタンのデザインやサイズ、位置などは好みに合わせてカスタマイズしてみてください。