などの疑問や悩みを解決してまいります。
LPであったり、ページが長いWebサイトなどでは必須な機能です。
この記事では初心者や苦手意識がある方でも簡単に実装できる方法をわかりやすく解説します。
トップに戻るボタンの完成例
トップに戻るボタンの完成例は以下になります。
See the Pen TOPに戻るボタン by koutarou mori (@koutarou-mori) on CodePen.
それでは各言語のコード解説をしていきます。
HTML解説
コードは以下のようになっています。
<body>
<p class="content">
コンテンツの始まり<br>
↓<br>↓<br>↓<br>↓<br>↓<br>↓<br>
↓<br>↓<br>↓<br>↓<br>↓<br>↓<br>
↓<br>↓<br>↓<br>↓<br>↓<br>↓<br>
↓<br>↓<br>↓<br>↓<br>↓<br>↓<br>
↓<br>↓<br>↓<br>↓<br>↓<br>↓<br>
↓<br>↓<br>↓<br>↓<br>↓<br>↓<br>
↓<br>↓<br>↓<br>↓<br>↓<br>↓<br>
↓<br>↓<br>↓<br>↓<br>↓<br>↓<br>
↓<br>↓<br>↓<br>↓<br>↓<br>↓<br>
コンテンツの終わり
</p><!-- /.content -->
<button id="pageTopBtn"></button><!-- /#pageTopBtn -->
</body>
コンテンツの最上部から最下部に戻る状態をわかりやすくするためにダミーでコンテンツの内容を入れているので、実質TOPに戻るボタンのコードは以下になります。
<body>
<button id="pageTopBtn"></button><!-- /#pageTopBtn -->
</body>
ボタンとなるbutton要素を用意しています。
ボタンの中の矢印は疑似要素で追加していますので、buttonの中身は不要です。
今回はbutton要素に対してpageTopBtnのIDを追加しています。
pageTopBtnIDをクリックされたらページ最上部に戻る動きをjsで指定していきます。
CSS解説
コードは以下のようになっています。
/* ボタンのデザイン */
#pageTopBtn {
position: fixed;
bottom: 30px;
right: 30px;
width: 50px;
height: 50px;
border: 2px solid #222;
border-radius: 50px;
cursor: pointer;
transition: all .5s;
}
/* ボタンホバー時 */
#pageTopBtn:hover {
background-color: #222;
}
#pageTopBtn:hover::before {
background-color: #fff;
}
#pageTopBtn:hover::after {
background-color: #fff;
}
/* ボタンの矢印 */
#pageTopBtn::before {
position: absolute;
content: '';
top: 50%;
left: 29px;
width: 2px;
height: 20px;
background-color: #222;
transition: all .5s;
transform: translateY(-50%) rotate(-45deg);
}
#pageTopBtn::after {
position: absolute;
content: '';
top: 50%;
right: 29px;
width: 2px;
height: 20px;
background-color: #222;
transition: all .5s;
transform: translateY(-50%) rotate(45deg);
}
CSSではページをスクロールしてもどこからでもページ最上部に戻れるようにボタンを追従させるため、positionプロパティにfixedを指定しています。
またボタン内の矢印は疑似要素で作成しています。
線をtransformプロパティのrotateを指定して、斜めに向かい合うようにして上向きの矢印を作成しています。
JS解説
コードは以下のようになっています。
$('#pageTopBtn').on('click', function () {
$('body,html').animate({
scrollTop: 0
}, 500);
});
$('#pageTopBtn').on('click', function () {は、pageTopBtnIDをクリックされたら~の部分になります。
クリックしたときの動きのコードですが、まずanimate()の中身の{ scrollTop: 0 }は、指定した要素(今回はhtml要素とbody要素を指定)から0pxの位置に移動するという意味があります。
なのでanimate()がない状態でもページ最上部に移動することはできるのですが、瞬間移動したような動きになります。
これでもいい方はいいのですが、動きに滑らかさが欲しい!という方にはanimate()を使用する必要があります。
今回指定した$('body,html').animate({scrollTop: 0}, 500);は、{scrollTop: 0}に対して0.5秒のスピードで実行するよう指定しています。
このようにanimate()は、animate()の引数に指定した内容に変化する時間を指定することができます。
ポイント
〇 $('#pageTopBtn').on('click', function () {は、pageTopBtnIDをクリックされたら~の部分
〇 animate()の中身の{ scrollTop: 0 }は、指定した要素から0pxの位置に移動するという意味
〇 animate({scrollTop: 0}, 500);は、{scrollTop: 0}に対して0.5秒のスピードで実行する指定