
フッター手前で止まる「ページトップへ戻るボタン」は
どうやって実装するの?
こんな疑問にお答えします。
よくフッター手前になったら、ページトップボタンが止まるサイトを見ますよね。
下記みたいに↓

これ実は簡単に実装できちゃいます。

すぐにできるよ!
ということで、この記事では「ページトップへ戻るボタンリンクを作成」について解説していきます!
基本的なページトップボタンの作り方は下記をどうぞ↓

・ページトップへ戻るボタンリンクを作成【jQuery】
・ページトップへ戻るボタンリンクを作成【CSS】
・ページトップへ戻るボタンリンクを作成【サンプル】
ページ内リンクのスクロール方法を調整したいなら下記記事をどうぞ↓

目次
【jQuery】ページトップへ戻るボタン【フッター手前で止まる】
See the Pen ➂:ページトップボタン by jito-coder (@jito-coder) on CodePen.
フッター部分まで行くと、ページトップボタンが止まりますよね。
重要なコードがこちら↓
<main class="main">
<h1 class="title">ここがページトップです</h1>
<a href="#" class="page-top">
<div class="page-top__arrow"></div>
</a>
</main>
<footer class="l-footer">
ここがフッターです
</footer>
.page-top {
display: flex;
justify-content: center;
align-items: center;
position: fixed;
right: 30px;
bottom: 30px;
width: 50px;
height: 50px;
background-color: #000066;
border-radius: 100%;
cursor: pointer;
transition: opacity .3s ease;
z-index: 5;
}
$(function () {
$(window).on("scroll", function () {
scrollHeight = $(document).height();
scrollPosition = $(window).height() + $(window).scrollTop();
footHeight = $(".l-footer").innerHeight();
if (scrollHeight - scrollPosition <= footHeight) {
$(".page-top").css({
position: "absolute",
});
} else {
$(".page-top").css({
position: "fixed",
});
}
});
});
$(function () {
$(window).on("scroll", function () {
scrollHeight = $(document).height();
scrollPosition = $(window).height() + $(window).scrollTop();
footHeight = $(".l-footer").innerHeight();
if (scrollHeight - scrollPosition <= footHeight) {
$(".page-top").css({
position: "absolute",
});
} else {
$(".page-top").css({
position: "fixed",
});
}
});
});
このコードを簡単に説明すると
「スクロール時にフッター手前まできたらページトップボタンのpositionをabsoluteに。フッターより上の場合は、ページトップボタンのpositionをfixedに」
という意味。
ページトップボタンのHTMLをどこに作成するのかで、absoluteの指定場所は変えるのが注意点。
今回はmainに対して「bottom: 30px」という指定。
【jQuery】ページトップへ戻るボタン【フッターあたりで消える】
これはちょっとおまけ。自分用のメモみたいなものです!
フッターあたりで消えるページトップボタンを作成してみました。
途中から出現して、フッター部分になったら消えるという仕様。
See the Pen ➃:ページトップボタン by jito-coder (@jito-coder) on CodePen.
重要なコードがこちら↓
$(function () {
$(window).on('load scroll', function(){
scrollHeight = $(document).height();
scrollPosition = $(window).height() + $(window).scrollTop();
footHeight = $(".l-footer").innerHeight();
if($(this).scrollTop() > 1) {
$('.page-top').addClass('show');
if (scrollHeight - scrollPosition <= footHeight) {
$('.page-top').removeClass('show');
} else {
$('.page-top').addClass('show');
}
}else{
$('.page-top').removeClass('show');
}
});
});
「スクロール時に、もし1pxよりウインドウの位置が上なら非表示。もし1pxよりウインドウの位置が下にあり、そしてもしフッターが見える位置より上なら表示。フッターが見える位置より下なら非表示に」
文字で説明すると難しいですね(笑)
フッター位置に来た時のif分に追加するクラスを変えれば、フッター位置で非表示になるときのアニメーションなどをカスタマイズできるかと。
ちなみに下記記事の方法と合体した感じです↓

【jQuery】ページトップへ戻るボタン【フッター手前で止まる】:まとめ
- フッター手前まできたかでif文指定
- 「fixed」から「absolute」にcssを変更させる
- 手前で非表示にさせるやり方もある

フッター手前で止まる「ページトップ位置へ戻るボタン」はよく使うので覚えておこう!
他の記事も参考にどうぞ↓
