๊ธฐ๋ฅ ์๊ตฌ์ฌํญ
IntersectionObserver๋ ๊ฒ์ ์ฒ์ ์๊ฒ ๋์๋ค. ๋ฌดํ ์คํฌ๋กค์ ๊ตฌํํ ๋ ์คํฌ๋กค ์ด๋ฒคํธ ๋ณด๋ค๋ ์ฑ๋ฅ์์ ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌดํ ์คํฌ๋กค์ ๊ตฌํํ ๋ ๋ง์ด๋ค ์ฐ๋ ๊ธฐ์ ์ธ ๊ฒ ๊ฐ๋ค.
์ ํ์ด์ง๋ฅผ ์คํฌ๋กค ํ ๋ ๋งํฌ ์ถ๊ฐํ๊ธฐ ๋ถ๋ถ์ด ๋ณด์ด์ง ์์๋ ์ด๋ฅผ ์ตํ๋จ์ ๊ณ ์ ์ํค๋ผ๋ ์๊ตฌ ์ฌํญ์ด์๋ค.
๋ ์์ฒ๋ผ footer๊ฐ ๋ณด์ธ๋ค๋ฉด ์ด๋ฅผ ๋ณด์ด๊ฒ ํ๋ฉด ์๋์๋ค.
์ฒ์ ์์ฑํ ์ฝ๋
useEffect(() => {
const observer = new IntersectionObserver(
(entries, observer) => {
entries.forEach((entry) => {
if (entry.target.id === "mainEntry") {
if (!entry.isIntersecting) {
setStyle({
position: "fixed",
bottom: 0,
left: 0,
right: 0,
zIndex: 9999,
});
} else {
setStyle({});
}
} else if ((entry.target.id = "mainExit")) {
if (entry.isIntersecting) {
setStyle({});
flag.current = true;
} else {
if (flag.current) {
setStyle({
position: "fixed",
bottom: 0,
left: 0,
right: 0,
zIndex: 9999,
});
flag.current = false;
}
}
}
});
},
{
root: null,
rootMargin: "0px",
threshold: 1,
}
);
๋ด ๋๋ฆ ์ง๊ด์ ์ผ๋ก ์ง ์ฝ๋์ด๋ค. ๋ค๋ฅธ ์ฌ๋์ด ๋ณด๊ธฐ์๋ ํ๋ค๊ฒ ์ง๋ง,
์ฐ์ ๋๋ style์ด๋ผ๋ state๋ฅผ ๋ง๋ค์๋ค. ์ด๋ฆ์ด style์ธ ์ด์ ๋ ์ด๋ฆ ์ง๊ธฐ๊ฐ ๋ฒ๊ฑฐ๋ก์ ์ด์์ด๋ค...ใ
์ฌ์ค, ref๋ฅผ ์ด์ฉํ์ง ์์ ๊ฒ๋ ๋ง์์ ๋ค์ง ์๊ณ , ๋ฌด์๋ณด๋ค intersection observer์ callback์์์ setStyle์ ํด์ฃผ๊ฒ ๋๋ ๋ถํ์ํ ๋ก์ง์ด ์ถ๊ฐ๊ฐ ๋์๋ค. (flag)
์ฒ์ ์์ฑํ ์ฝ๋์ ๊ฐ์ ์
๊ฐ ์์์ intersecting ์ ๋ฌด๋ฅผ ์ ์ฅํ๋ state๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ํตํด style์ ์กฐ๊ฑด๋ถ ๋ฐฉ์์ผ๋ก prop์ผ๋ก ๋ด๋ ค์ฃผ๋ฉด ๋ ๊น๋ํด์ง ๊ฒ์ด๋ค. ์ ์ฝ๋์ style์ ์กฐ๊ฑด๋ถ๋ก ๋ด๋ ค์ฃผ์ด ๋ ์์๊ฐ ๋ชจ๋ ํ๋ฉด์ ๋ณด์ด์ง ์์ ๋ FolderAddLinkArea๋ฅผ "ํ๋จ์ ๊ณ ์ " ์ํค๋๋ก ํ๋ฉด ๋ ๊ฒ์ด๋ค.
๋ ๋์ ๋ฐฉ๋ฒ์ ์์๊น?
์ฌ์ค intersection observer๋ฅผ ๋ฆฌ์กํธ์์ ๊ตฌํํ ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ๊ฑฐ์ ๋ค ์ปค์คํ ํ ์ ์ฌ์ฉํ๋ค. ์์ '์ฒ์ ์์ฑํ ์ฝ๋์ ๊ฐ์ ์ '์์ state๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ์ด intersection observer๋ฅผ ์ํ ๋ก์ง์ด ๋๋ฌด ๊ธธ์ด์ง๋ ๊ฒ์ ์๋๊ฐ ์ฐ๋ ค๋์๋ค. ๊ทธ๋์ ์ด๋ฅผ ์ปค์คํ ํ ์ผ๋ก ๋นผ๋ ๋ฐฉ๋ฒ๋ ์๊ฐํด๋ณผ๋ง ํ ๊ฒ ๊ฐ๋ค
๊ทธ๋์, ์ด๋ฅผ ์ปค์คํ ํ ์ผ๋ก ํ ๋ฒ ๋นผ ๋ณด์๋ค!!
ํ์คํ useIntersectionobserver๋ผ๋ ํ ์ ๋ง๋ค๊ณ ์ด๋ฅผ ์ด์ฉํ๋ ์ปดํฌ๋ํธ ๋ด์์ ์ฌํ ์๊ตฌ์ฌํญ์ ๋ํ ์ฝ๋๊ฐ ๊ฐํธํด์ง๊ธด ํ๋ ๊ฒ ๊ฐ๋ค.
์๊ฐํด๋ณผ์
์ปดํฌ๋ํธ๋ฅผ ์ด๋ป๊ฒ ๋๋์๋์ง์ ๋ฐ๋ผ ์ด ์ฌํ ์๊ตฌ์ฌํญ ๊ตฌํ์ ์ฝ๋๊ฐ ์ถ๊ฐํด์ผ ํ ๊ฒ ์๋ ๊ฒฝ์ฐ๊ฐ ์์๋ค. ์ฒ์๋ถํฐ ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๋๋๋ฉด ์ข๊ฒ ์ง๋ง ํ๋ ๊ฒ ๊ฐ๋ค.
(๋ฏธ์์ฑ)
+ ์ปดํฌ๋ํธ๋ฅผ ์๋ก ๋ง๋ ๋ฐฉ์ ์ ์ด๋ณด๊ธฐ