こんにちは、SIMです。
今日はjQueryでページトップへ戻るボタンの作り方を紹介します。
今回紹介するページトップへ戻るボタンは、普段は非表示で下にスクロールした時だけフェードインアニメーションで現れるタイプです。
そして、ボタンを押すと指定のスピードでページトップへスクロールアップします。
実際、どういう動きをするかは、下にCodePenを置いておくのでご確認下さい。
See the Pen PageTop Button by s sim (@s-sim) on CodePen.
ページトップボタンを作る下準備
リセットCSSのCDN
リセットCSSの種類が違うと表示が同じにならないのでご注意下さい。
このリセットCSSへのパスを書く場所はHTMLのheadタグ内です。CSS関連のファイルの一番上に書いて下さい(超重要)。
<!-- reset.css destyle -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/destyle.css@1.0.15/destyle.css" />
jQueryのCDN
jQueryのCDNはHTMLのbody閉じタグ直上に書いてください。
<!-- jQueryのCDNへのパス -->
<script src="https://code.jquery.com/jquery-3.6.1.min.js"
integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
</body>
そして、自分のサイト用のJavaScript(jQuery)ファイルへのパスもその下に書くのを忘れずに!
パスは個人個人で違うと思うので、適宜変更してください。下のコードは一例です。
<!-- jQueryのCDNへのパス -->
<script src="https://code.jquery.com/jquery-3.6.1.min.js"
integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
<!-- このサイトのスクリプトへのパス -->
<script src="./script.js"></script>
</body>
HTMLの書き方|ページトップボタン
HTMLの構造は下のとおりで、コード自体はかなり短いです。
「上に戻るボタン」のコードを書く場所ですが、私はいつもfooterタグの直上に書きます。
<!-- 上に戻るボタン(全ページ共通パーツ) -->
<div id="page_top">
<a class="c-up-to-btn_a" href="#">
<img class="c-up-to-btn_img"
src="https://shimizu-create.com/wp-content/uploads/2024/03/アセット-1@4x.png" alt="上に戻るボタン">
</a>
</div>
<!-- 以下、footer -->
これらのコードのうち、jQueryの制御に直接関係しているタグは一番上の「id=”page_top”」のdivタグです。このid=”page_top”でjQueryアニメーションを動かします。
CSSの書き方|ページトップボタン
CSSのコードも非常にシンプルで短いです。
/* ------------------ */
/* 上に戻るボタン */
/* ------------------ */
/* ボタン関係の部品を全部囲うタグ:ここのidがjQueryの動作と連動する */
#page_top {
position: fixed;
bottom: 60px;
right: 20px;
opacity: 0.5;
}
/* ボタン画像のサイズ指定 */
.c-up-to-btn_img{
width: 50px;
height: 50px;
}
HTMLのところで書いた「div id=”page_top”」タグのスタイルですが、position: fixed;で特定の位置に固定しておきます。
この例では、ページ下端から60px、右端から20pxの位置に表示させるように設定しています。
ここは好みで変えて下さい。
jQueryの書き方|ページトップボタン
jQureyのコードも型がある程度決まっているので、基本コピペでOKです。
// 上へ戻るボタン
$(function(){
var pagetop = $('#page_top');
// 普段はボタン非表示
pagetop.hide();
// 100px スクロールしたらボタン表示(フェードインで)
$(window).scroll(function () {
if ($(this).scrollTop() > 100) {
pagetop.fadeIn();
// そうじゃない場合は非表示(フェードアウトで)
} else {
pagetop.fadeOut();
}
});
// ボタンをクリックしたら500ミリ秒かけてページ上部(0pxの位置)までスクロールアップで移動
pagetop.click(function () {
$('body, html').animate({ scrollTop: 0 }, 500);
return false;
});
});
一応、jQueryの各コードの説明はコメントアウトで書いておいたとおりですが、好みで変更できるので方法を下にまとめておきました。
- どのくらいスクロールしたらボタンをフェードイン表示させるか?:「if ($(this).scrollTop() > 100) 」の100pxを好みで変えて下さい。これがページトップボタンを表示させるまでのスクロール量(ピクセル単位)になります。
- ページトップボタンをクリックしたらどのくらいのスピードでページトップまでスクロールアップさせるか?:「$(‘body, html’).animate({ scrollTop: 0 }, 500)」の500ミリ秒(0.5秒)を好みの数字に変えて下さい。これがボタンを押してからページトップへ戻るまでの時間(ミリ秒単位)になります。
- ページトップボタンをクリックしたらどの位置までスクロールアップさせるか?:同じく「$(‘body, html’).animate({ scrollTop: 0 }, 500)」のscrollTop: 0の数字(この場合はページ上端から0ピクセルの位置)を好みの値に変えてください。ピクセル単位です。
ページトップボタンのCodePenをもう一度、貼っておくので、動作やJSの他にHTMLやCSSのコードなども確認してみて下さい。
See the Pen PageTop Button by s sim (@s-sim) on CodePen.
まとめ
以上、ページトップに戻るボタンのjQueryアニメーションについて紹介しました。コード自体は非常にシンプルですので、是非コピペで使ってみて下さい。
ページトップボタンのバリエーションについても、そのうち追記したいと思います。
では!