์ด๋ฒ ์ฑํฐ๋ ๋ฌดํ ์คํฌ๋กค์ ๋ํด ๋ค๋ฃจ์์ต๋๋ค.
โ ๏ธ ์ ๋ฆฌํ ๋ด์ฉ์ ์คํ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์ปจํ ์ธ ๋ฅผ ํ์ด์ง ํ๋ ๊ธฐ๋ฒ ์ค ํ๋๋ก, ์๋๋ก ์คํฌ๋กคํ๋ค๊ฐ ์ปจํ ์ธ ์ ๋ง์ง๋ง ์์๋ฅผ ๋ณผ ๋ ๋ค๋ฅธ ์ปจํ ์ธ ๊ฐ ์์ผ๋ฉด ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ด๋ค.
๊ตฌํ ๋ฐฉ๋ฒ
window.innerHeight + window.scrollY >= document.body.offsetHeight
์ฝ๋์ฒ๋ผ ์คํฌ๋กค์ด ํ๋ฉด์ ๋ง์ง๋ง์ ๋ฟ์๋์ง ์ฒดํฌํ๋ค.
๐ค Intersection Observer??
๋์ ์์์ ์์ ์์, ๋๋ ๋์ ์์์ ์ต์์ ๋ฌธ์์ ๋ทฐํฌํธ๊ฐ ์๋ก ๊ต์ฐจํ๋ ์์ญ์ด ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ ์ด๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์งํ ์ ์๋ ์๋จ์ ์ ๊ณต
์ฝ๊ฒ ๋งํ์๋ฉด ์ด๋ ํ ๋ ๊ฐ์ฒด๊ฐ ์์ผ์ ๋ฟ์๋์ง ์ ๋ฟ์๋์ง ํ์ธํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
Intersection Observer์ ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ค.
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) { //entry๊ฐ ํ๋ฉด์ ๋ณด์ด๋์?
if (this.state.totalCount > this.state.datas.length) {
onScrollEnded();
}
}
});
},{
threshold: 0.5, // ์ค์ ๋ก ์ผ๋ง๋งํผ ๋ณด์๋์!~
}
}
observer.unobserve(element); // ํน์ ๋์ ์์์ ๋ํ ์ฃผ์๋ฅผ ํด์
observer.observe(element); // ์ฃผ์ด์ง ๋์ ์์๋ฅผ ์ฃผ์
๋ฒ์จ ๋ฐ๋๋ผJS๋ฅผ ๋ฐฐ์ด์ง 2์ฃผ์ ๋๊ฐ ์ง๋ฌ๋ค. ๊ฐ์๋ฅผ ๋ฃ๋ ๋์ค์ ๊ฐ์ฌ๋์ด app๊ณผ main์ ๋ถ๋ฆฌํด์ ๋ง๋๋ ์ด์ ๋ฅผ ํ๋ฒ ์๊ฐํด๋ณด๋ผ๊ณ ํ์ ์ ๋ฐ๋ก ์๊ฐํ ๋ด์ฉ์ ์ ๋ฆฌํด ๋ณด์๋ค.
ํด๋ ๊ตฌ์กฐ
๐ index.html
๐ฆ src
โฃ ๐ App.js
โ ๐ main.js
// index.html
<body>
<script src='/src/main.js', type='module'></script>
</body>
// main.js
import App from './App.js'
export default function main(){
// App ์์ฑ(์ ์ธ)
new App()
}
// App.js
export default function App(){
// ๊ธฐ๋ฅ ์คํ
}
๋ด๊ฐ ๊ณ ๋ฏผํด ๋ณธ ๊ฒฐ๊ณผ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํด์ ์ ์ง๋ณด์๋ฅผ ํธํ๊ฒ ํ๊ธฐ ์ํด์(?) ์ด๋ค. ์๋ฌด๋๋ ๋๊ฐ์ ํ์ผ์ ํ๋๋ก ๊ด๋ฆฌํ๋ค ๋ณด๋ฉด ํ๋ฆ์ด ๊ผฌ์ผ ์ ์๋ค๊ณ ๋๊ปด์ก๋ค. ์ฆ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๊ณ ์๋ก ๋ง์ด ์ฐ๊ด๋์ด ์์ ์๋ก ์์กด๋๊ฐ ์ปค์ง๊ธฐ ๋๋ฌธ์ ์ ์ธํ๋ ๊ณณ๊ณผ ์คํํ๋ ๊ณณ์ ๋ถ๋ฆฌํ์ฌ ์ ์ง๋ณด์๋ฅผ ํธํ๊ฒ ํ๊ธฐ ์ํด์๋ผ๊ณ ์๊ฐํ๋ค.
๊ฐ์ฌ๋์ด ๋ง์ํด์ฃผ์ ๋ต๋ณ
์ปดํฌ๋ํธ์ ์ ์ธ๋ถ์ ์คํ๋ถ๋ฅผ ๋ถ๋ฆฌ์ํค๊ธฐ ์ํด์!
๋ฌดํ ์คํฌ๋กค์์ Intersection Observer์ด๋ผ๋ ๊ฒ์ ์ฒ์ ์์๋ค. Intersection Observer์ด ํธํด๋ณด์ด์ง๋ง ์คํฌ๋กค, ํน์ ํ์ด์ง๋ก ์ฒ๋ฆฌ ํ๋ ๋ฐฉ๋ฒ๋ ์์ผ๋ ์ฌ์ฉ์๊ฐ ํธํ ๊ฒ ๊ฐ์ ์ํฉ์ ๋ฐ๋ผ ์ฒ๋ฆฌํด์ผ ๊ฒ ๋ค๊ณ ๋ค์งํ์๋ค.
App.js์ main.js๋ฅผ ๋ถ๋ฆฌํ๋ ์ด์ ๋ฅผ ์๊ฐํด๋ณด์์ง๋ง ์ด์ ์ ๋ํด ํ์ ํ์ง ๋ชปํ๊ฒ ๋ค. '์๋ง ์ด๋ด ๊ฒ์ด๋ค..'๋ก ์ถ์ธกํ์์ง๋ง ๋ค๋ฅธ ๋ถ๋ค์ ์๊ฐ๋ ๊ถ๊ธํ๋ ์ด ๊ธ์ ๋ณด์ ๋ค๋ฉด ๋๊ธ๋ก ๋ฌ์์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋น.๐
๋๋์ด! ๋ฐ๋ฆฐ ๊ฐ์๋ฅผ ๋ชจ๋ ๋ค์์ต๋๋ค! ๋ค์ ์ผ์์ผ๋ก ๋์์์ผ๋ ๋ฌ๋ ค๋ณด๊ฒ ์ต๋๋ค! ์์์์
์ด์ ๋ ์จ๊ฐ ์ง์ง ๋ด์ด๋ค!
๊ฝ๊ฐ๋ฃจ๋ฅผ ๋ ๋ ค~~ ๐ธ๐ธ