[React] ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์„น์…˜์˜ offsetTop ๊ฐ’์œผ๋กœ ์ด๋™ํ•˜์ง€ ์•Š๋Š” ์ด์Šˆ

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์„ ๋นผ์ฃผ๊ธฐ๋กœ ํ•จ!

 

์„ฑ๊ณต!