![見出し画像](https://assets.st-note.com/production/uploads/images/102743226/rectangle_large_type_2_81fb5c88b5ac73276f7de48b2eac03e1.jpeg?width=1200)
React で上に戻るボタンを作成する
まずはググってみる
上に戻る機能のみなら、こちらの方のコードが1番わかりやすいと思います
const returnTop = () => {
window.scrollTo({
top: 0,
behavior: "smooth",
});
};
上記の関数をonClickで使うだけです
ある程度スクロールしたら戻るボタンを表示したい
一定の所までスクロールしたら表示されるようにしたいので、そのためにはスクロール位置を検知しなければなりません。ググっても難しいのばかりでしたので、昔使ってた素のJavaScriptのコードを使います。J Queryでもいいかなと思いましたがJavaScriptでやってみます
useEffectを使います
useEffectの中で使わないとうまく動きませんでした
useEffect(() => {
const goTop = document.getElementById("goTop");
window.addEventListener("scroll", () => {
if (window.pageYOffset > 100) {
goTop.classList.add("fixed");
} else {
goTop.classList.remove("fixed");
}
});
}, []);
わぉ!document.getElementById って久しぶりに見た!
スクロール時の処理は、window.addEventListener("scroll", () => {}) です
window.pageYOffset でスクロール位置を検知します
スクロール位置が100以上になったらボタンが表示されます
classListでクラスを追加する所は、useStateに変えてもいいかもです
上記2つのコードを合わせて完成です
全体コード tailwindcssを使用してます
import React, { useEffect } from "react";
import { FaChevronUp } from "react-icons/fa";
export const GoTop = () => {
useEffect(() => {
const goTop = document.getElementById("goTop");
window.addEventListener("scroll", () => {
if (window.pageYOffset > 100) {
goTop.classList.add("fixed");
} else {
goTop.classList.remove("fixed");
}
});
}, []);
const returnTop = () => {
window.scrollTo({
top: 0,
behavior: "smooth",
});
};
return (
/* <!-- 上に戻るボタン --> */
<a>
<FaChevronUp
id="goTop"
className="md:text-5xl text-4xl opacity-75 font-bold text-white bg-theme rounded-full p-3 right-10 bottom-10 z-10 hover:bg-selected-button"
onClick={returnTop}
/>
</a>
);
};
追伸
パフォーマンスの面でjsの"scroll"イベントは悪いので、
Intersection Observer APIを使用するようにしてください
この記事が気に入ったらサポートをしてみませんか?