2021.01.04

jQuery

トップへ戻るボタンをフッターの上部に表示

デモページはこちら

jQueryでフッターの高さを取得し、ユーザーがページ最下部までスクロールしても、トップへ戻るボタンをフッターよりも上部に表示します。

フッターとトップへ戻るボタンのhtmlは以下の通りです。

<footer>
	<div class="copyright">Copyright © Brick Plan All Rights Reserved.</div>
</footer>
<p class="toTop"><a href="#page-top">↑</a></p>

以下のCSSを設定します。クラス名toTopのpタグはopacity: 0;を設定し、クラス名is-activeを付与した時のみ表示します。フッターはPCとスマホ表示時で高さを変えます。

.toTop {
	position: fixed;
	right: 1em;
	bottom: 1em;
	pointer-events: none;
	opacity: 0;
	margin: 0;
	transition: opacity 0.5s;
}
.toTop.is-active {
	pointer-events: auto;
	opacity: 1;
}
.toTop a {
	display: flex;
	justify-content: center;
	align-items: center;
	width: 50px;
	height: 50Px;
	border-radius: 50%;
	background: #000;
	color: #fff;
	font-weight: bold;
}
footer {
	background: #000;
	padding: 3em;
}
@media screen and (max-width:768px) { 
	footer {
		padding: 2em;
	}
}
.copyright {
	text-align: center;
	color: #fff;
	font-size: 14px;
}

以下jQueryのコードです。ページのロード、スクロール、リサイズ時の動作になります。トップへ戻るボタンはブラウザの高さの半分よりもスクロール量が大きくなったタイミングで表示・非表示を切り替えます。また、ドキュメントの高さ-(ウインドウの高さ+スクロール量)がフッターの高さ以下になったらトップへ戻るボタンのCSSを変更します。フッターの高さ+調整pxの位置に配置して、フッターよりも上部に表示します。調整pxはPCとスマホ表示時で変更しています。なお、フッターの高さはpaddingも含めて取得するためinnerHeight();を使用します。

$(window).on('load scroll resize', function() {
	if($('.toTop')[0]) {
		var h = $(window).height(); //ブラウザの高さ
		var w = $(window).width(); //ブラウザの幅
		var scrollTop = $(window).scrollTop(); //実際のスクロール量

		if(scrollTop > h / 2) {
			$('.toTop').addClass('is-active');
		} else {
			$('.toTop').removeClass('is-active');
		}

		if(w < 768) {
			btm = 10;
		} else {
			btm = 20;
		}

		docsHeight = $(document).height(); //ドキュメント全体の高さ 
		scrollPosition = h + scrollTop; //ウインドウの高さ + スクロール量
		footHeight = $('footer').innerHeight(); //フッターの高さ(=止めたい位置)

		//ドキュメントの高さ-(ウインドウの高さ+スクロール量)がフッターの高さ以下になったら
		if(docsHeight - scrollPosition <= footHeight) {
			$('.toTop').css({
				'position': 'absolute',
				'bottom': footHeight + btm //bottomをフッターの高さ+調整pxに指定
			});
		} else {
			$('.toTop').css({
				'position': 'fixed',
				'bottom' : '1em'
			});
		}
	}
});

関連記事

2020.09.29

jQuery

PC表示でページの途中からスクロールに追従するナビゲーション

デモページはこちら PC表示の場合、ページの途中に配置したナビゲーションが画面の一番上に来たタイミングで固定され、スクロールに追従する動作を実装します。 ナビゲ…

2020.10.15

jQuery

jQueryプラグイン jquery.matchHeight.jsの使い方

jQueryプラグイン、jquery.matchHeight.jsの使い方です。全てのページ共通で、以下のhtml構造でテストします。デモページではクラス名bo…

2020.08.16

jQuery

loadメソッドでhtmlファイルを読み込み

jQueryのloadメソッドはajaxの機能を限定的にした簡易版のような位置づけで、htmlファイルを読み込んで出力するだけの機能に特化しています。空のdiv…

2020.09.13

jQuery

jQueryのDeferredオブジェクトを利用した同期処理

デモページはこちら svgロードアニメーションをフェードアウトする処理を、jQueryのDeferredオブジェクトを利用して同期処理(非同期処理を待つ処理)で…

2020.09.22

jQuery

jQueryで親要素を取得(parent・parents・closest)

デモページはこちら jQueryで親要素(親要素の親要素である先祖要素を含む)を取得するメソッドのまとめです。対象要素の親要素を取得するparent、対象要素の…

上に戻る