ํ๋ก์ ํธ ๋น์์๋ Throttling & debouncing์ ๋ํด ํ์ตํ ์๊ฐ๋ ์์ด์ ; ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ก๋ง ์งํํ์๋ ๋ถ๋ถ์ด๋ค.
๋ฌธ์ ์ ๋ฆฌํ๋ค ๋ณด๋๊น ์ด์ Intersection Observer API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ง์ด ์ด๋ค๊ณ ํด์,
๋ค์ ํ๋ก์ ํธ์๋ Intersection Observer API์ ๋ํด ํ์ตํ๊ณ ์ด๊ฑธ๋ก ๋ฌดํ์คํฌ๋กค์ ๊ตฌํํ๋ค.
โก๏ธ Intersection Observer API๋ฅผ ์ฌ์ฉํ ๋ฌดํ์คํฌ๋กค ๊ตฌํ ๐
์ฌ๊ธฐ์๋ ๋ฐฑ์์ ์ฒ์์ 5๊ฐ ์๋ผ์ ๋ณด๋ด์ฃผ์ ๊ฑธ ๋ฐ์์, ์คํฌ๋กค ์ด๋ฒคํธ์ +5๊ฐ ํญ๋ชฉ ์ฉ ๋ํด์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ผ๋ก ์งํํ๋ค.

const handleScroll = () => {
const windowHeight = window.innerHeight; // ํ์ฌ ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋์ด
const documentHeight = document.documentElement.scrollHeight; // ๋ฌธ์์ ์ด ๋์ด
const scrollTop = window.scrollY || document.documentElement.scrollTop; // ํ์ฌ ์คํฌ๋กค ์์น
// ์ฐฝ์ ๋์ด + ์คํฌ๋กค ์์น๋ฅผ ๋ํ ๊ฐ์ด ๋ฌธ์์ ์ ์ฒด ๋์ด์์ -100px ํ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ ์ด์ ํญ๋ชฉ์ 5๋ฅผ ๋ํด ์๋ก์ด offset ์ค์
if (windowHeight + scrollTop >= documentHeight - 100 && !loading) {
setOffset(prevOffset => prevOffset + 5);
}
};
useEffect(() => {
window.addEventListener('scroll', handleScroll);
return () => {
window.removeEventListener('scroll', handleScroll);
};
}, []);
'What I Learn' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| TanStack Query์ ํจ๊ป ๊ตฌํํ cursor ๋ฐฉ์์ ๋ฌดํ ์คํฌ๋กค (1) | 2024.12.10 |
|---|---|
| Toast ์ ์ฉ๊ธฐ (0) | 2024.12.10 |
| Next.js ๋ณ๋ ฌ ๋ผ์ฐํ & ๊ฒฝ๋ก ๊ฐ๋ก์ฑ๊ธฐ๋ฅผ ํตํ ๋ชจ๋ฌ ํ์ด์ง ๊ตฌํ (1) | 2024.10.27 |
| OSSCA: LLM ์กฐ์ฌ, Continue ๋ถ์ ๋ฐ ์ ๋ฆฌ (8) | 2024.10.24 |
| next-auth๋ฅผ ์ฌ์ฉํ ์นด์นด์ค ๋ก๊ทธ์ธ (4) | 2024.10.22 |