2023. 2. 24. 00:37ใportfolio issue
vanila javascript๋ก ๋ง๋ ํฌํธํด๋ฆฌ์ค๋ฅผ react๋ก ๋ณํํ๋ฉด์ ๋ฉ์ธ ํ์ด์ง์ nav ๋ฒํผ์ ์ถ๊ฐํ์๋ค.
๊ตฌํ ํ ์ ๋์ํ๋ ํ์ธํด๋ดค๋๋ ๋ฒํผ์ ํด๋นํ๋ ์น์ ์ offsetTop๊ฐ์ด ์ด์ํ ๊ฒ.....!
header๋ฅผ fixed๋ก ๋์๋๋ ๋ฐ๋์ ๊ฐ ์น์ ์ ๋์ด๋ฅผ calc(100vh - header๋์ด)๋งํผ ์ค ๊ฒ ๋๋ฌธ์ ์ด๋ฐ ์ด์๊ฐ ์๊ธด ๋ฏ ํ๋ค
css์์ ์น์ ์ ๋์ด ๊ฐ์ 100vh๋ก ๋ฐ๊ฟ๋ดค๋๋ header ์์ญ์ด ์์กํ๋ค๋ณด๋ ์น์ ์ ์ผ์ ๋ถ๋ถ์ด ํค๋์ ๊ฐ๋ ค์ง๋ ๊ฑด ๋๊ฐ์๋ค
์ฒ์ ํด ๋ณธ ๊ฒ) ๋งจ ์ฒ์ ์น์ ์ header๋ก ์ก์ scroll ๊ฐ์ 0์ผ๋ก ๋ง๋ค์ด๋ณด๋ ๊ฒ์ด์๋ค.
์ง๊ธ์ scroll๊ฐ์ด 0์ด ์๋ ๋ฏํ์ฌ ํด๋ณธ ๋ฐฉ์์ด์๋ค.
์น์ ๋ค์ ๋ ์ด์์์ด ๋น์ทํ๊ธฐ ๋๋ฌธ์ contents๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ๊ฐ ์น์ ์ ์ ์ฉ์ ํ์๊ณ ์ฌ๊ธฐ ๊ณตํต ํด๋์ค๋ก myScroll์ ์ ์ฉํ์ฌ ๋ฒํผ์ด ํ์ฑํ ๋ ๋ myScroll ํด๋์ค์ onํด๋์ค๊ฐ ๋ถ๋ ํํ๋ก ์คํฌ๋ฆฝํธ ์์ ์ ํ์๋ค.

๊ทธ๋์ ๋งจ ์ฒซ๋ฒ ์งธ ์น์ ์์ myScroll ํด๋์ค๋ฅผ ์ ๊ฑฐํ ํ header์ myScroll ํด๋์ค๋ฅผ ๋ถ์ฌํ๋๋ฐ ๋๋ฒ์งธ ์น์ ๋ถํฐ ํค๋๋์ด๋งํผ ๋ค์ ๋น๊ฒจ์ ธ์ ์ถ๋ ฅ์ด ๋์๋ค.....(์ฅฌ๋ฅด๋ฅต)
๋ ๋ฒ์งธ๋ ๋ชจ๋ ์น์ ์ offsetTop ๊ฐ์์ header ๋์ด๊ฐ๋งํผ ๋นผ์ฃผ๋ ๊ฒ์ด์๋ค
const pos = useRef([]);
const btnRef = useRef(null);
//์ธ๋ก์์น๊ฐ ๊ฐฑ์ ํจ์
const getPos = () => {
pos.current = [];
const secs = btnRef.current.parentElement.querySelectorAll('.myScroll');
for (const sec of secs) {
if (matchMedia('screen and (min-width: 1024px)').matches) {
pos.current.push(sec.offsetTop - 80);
} else {
pos.current.push(sec.offsetTop - 60);
}
}
setPos(pos.current);
};
์์น๊ฐ ๊ฐฑ์ ํด์ฃผ๋ ํจ์์์ sec.offsetTop ๊ฐ์์ header ๋์ด์ธ 80์ ๋นผ์ฃผ๊ณ 1024px ๋ฏธ๋ง์ด๋ฉด 60์ ๋นผ์ฃผ๊ธฐ๋ก ํจ!
์ฑ๊ณต!