ํฐ์คํ ๋ฆฌ ๋ทฐ
๊ตฌํ ๊ฒฐ๊ณผ
๋ค์๊ณผ ๊ฐ์ด Scroll๊ฐ์ด ํ๋ฉด ์์ ๋ ์ง์ ์ ๋๋ฌํ์ ๊ฒฝ์ฐ์ ์ถ๊ฐ์ ์ผ๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ฌ ํ๋ฉด์ ๋๋๋ง๋๋๋ก ๊ธฐ๋ฅ ๊ตฌํํ์๋ค.
๋ฆฌ์กํธ ์์์ ์ ์ญ ๊ฐ์ฒด(Window)์ ์คํฌ๋กค ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํด์ฃผ๋ ์์ ์ ์ด๋ฒ์ ์ฒ์ํ๋ ๊ฑฐ์๊ธฐ ๋๋ฌธ์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ํฌ์คํ ํด๋ณด๊ณ ์ ํ๋ค.
์์ค ์ฝ๋
์ฐ์ , ์ ์ญ ๊ฐ์ฒด Window์ Scroll Event๋ฅผ ๋ฐ์ธ๋ฉํด์ฃผ๋ ์์ ์ ๋ชจ๋ ์์๊ฐ ํ๋ฉด์ ๋์ค๋ ์ฒ์๋ถํฐ ์ด๋ค.
Vanilla Javascript ์์์๋ ์ด ์์ ์ DomContentLoaded ๋ load ๋ ์์ ์ ํด์ฃผ์ง๋ง ๋ฆฌ์กํธ ์์์๋ ํด๋น ์ด๋ฒคํธ ๋ฐ์ ์์ Scroll ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํด์ฃผ๋ ๊ฒ๋ณด๋ค ์ปดํฌ๋ํธ๊ฐ ์ฒ์ Mount(๋ง์ดํธ) ๋๋ ์์ ์ ํ๋ ๊ฒ์ด ๋ ๋ช ํํ๋ค๊ณ ์๊ฐ์ด ๋ค์๋ค.
์ด์ ๋ค์๊ณผ ๊ฐ์ด ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ง์ดํธ ๋ฌ์ ๋๋ง ์คํ๋๋ componentDidMount ๋ผ์ดํ ์ฌ์ดํด ๋ฉ์๋ ๋ด์์ Window ์ ์ญ ๊ฐ์ฒด์ Scroll Event๋ฅผ ๋ฐ์ธ๋ฉ ํด์ฃผ์๋ค.
componentDidMount() {
window.addEventListener('scroll', this.checkFetchAddData, true);
( ... )
}
๊ทธ ๋ค์์ผ๋ก ์คํฌ๋กค ์ด๋ฒคํธ๊ฐ ๋งค๋ฒ ๋ฐ์ํ ๋๋ง๋ค ์คํ๋๋ checkFetchAddData ๋ด์์ ๋ค์๊ณผ ๊ฐ์ด ํ์ฌ ์คํฌ๋กค ๋ ์์น๊ฐ์ ๊ณ์ ๊ณ์ฐํด์ฃผ์๊ณ Entry ์ง์ ์ ๋๋ฌํ๊ฒ ๋๋ ์๊ฐ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ์ฐ์ฐ์ ํ์ฌ ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ ํ๋ฉด์ ๋๋๋ง๋๋๋ก ์ฝ๋๋ฅผ ์์ฑํ์๋ค.
checkFetchAddData = event => {
let { scrollTop, scrollHeight, clientHeight } =
event.target.scrollingElement;
let targetScrollPos = scrollHeight - parseInt(scrollTop); // ์คํฌ๋กค ๋ ์ง์ ๊ณ์ฐ
if (targetScrollPos === clientHeight) // ์คํฌ๋กค์ด ๋ ์ง์ ์ ๋๋ฌํ์ ๊ฒฝ์ฐ
this.sequenceFetchPath(this.fetchSoleFeedsAddPaths); // ์๋ฒ์ ์ถ๊ฐ ๋ฐ์ดํฐ ์์ฒญ
};
ํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์์ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ ๋ด์์ ์คํฌ๋กค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์์ ๋, ํด๋น ์ฝ๋ฐฑ ํจ์๊ฐ ๊ณ์ ์คํ๋๋ฉด์ ์๋์น ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค.
์ ํํ ์์ธ์ ์ฐพ์ง ๋ชปํ์์ง๋ง Window ์ ์ญ ๊ฐ์ฒด์ Scroll Event๋ฅผ ๋ฐ์ธ๋ฉํด์๊ธฐ ๋๋ฌธ์, ๊ทธ ์๋์ ์์ ์์๋ค ๋ํ ๊ฐ์ญ์ ๋ฐ๋ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ค์๊ณ ํด๋น ๋ฉ์๋ ์๋จ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์์๋ค์ผ ๊ฒฝ์ฐ์๋ return ์ข ๋ฅํ๋๋ก ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๋ค.
checkFetchAddData = event => {
if (
event.target.className === 'feedsCarousel' ||
event.target.className === 'commentContainer' ||
event.target.className === 'profileContainer'
)
return;
( ... )
};
์ฌ์ค ๊ฐ์ DOM์ ์ฌ์ฉํ๋ ๋ฆฌ์กํธ ๋ด์์ ์ด๋ ๊ฒ DOM์ ์ง์ ์ ๊ทผํ๋ ๋ฐฉ์์ ๋ณธ์ฐ์ ์ถฉ์ค์น ๋ชปํ๋ค๊ณ ์๊ฐ์ด ๋ ๋ค.
ํฅํ ๋ฆฌ์กํธ ์์์ ์ด๋ฒคํธ ์ ํ ๋ฐฉ์ง๋ฅผ ์ํ ๋ค๋ฅธ ๋ฐฉ์์ด ์๋์ง์ ๋ํด์ ์ถ๊ฐ๋ก ๊ณต๋ถ๋ฅผ ํ ๋ค์ ํฌ์คํ ํ๊ณ ์ ํ๋ค.
๊ด๋ จ ํฌ์คํ
https://choi95.tistory.com/102