ํฐ์คํ ๋ฆฌ ๋ทฐ
Question
1. ์ต์ด์๋ 20๊ฐ์ ๋ชฉ๋ก์ ๋ถ๋ฌ์จ๋ค.
2. ์คํฌ๋กค์ ์ตํ๋จ์ผ๋ก ์ด๋์ 'loading' ์ํ ํ์๊ฐ ๋ํ๋๋ฉฐ, ์ดํ์ 20๊ฐ ๋ชฉ๋ก์ ๋ ๊ฐ์ ธ์จ๋ค.
3. ๋ก๋ฉ ์๋ฃ์ 'loading'ํ์๊ฐ ์ฌ๋ผ์ง๋ฉฐ, ๊ฐ์ ธ์จ ๋ชฉ๋ก์ด ํ๋จ์ ์ถ๊ฐ๋๋ค. (๋ฌดํ ๋ฐ๋ณต)
Solution
const loadMore = async () => {
const target = page ? fetchMoreTrigger : app;
target.classList.add("loading");
await renderList(page++);
target.classList.remove("loading");
};
const onScroll = async e => {
const {scrollTop, scrollHeight, clientHeight} = e.target.scrollingElement;
if(scrollHeight - scrollTop === clientHeight) {
const target = page ? fetchMoreTrigger : app;
target.classList.add("loading");
await renderList(page++);
target.classList.remove("loading");
}
};
Issue
1. ์คํฌ๋กค ์ด๋ฒคํธ๋ฅผ ํ๋ฉด ์ด๋ฒคํธ ํ๊ฒ์ scrollingElement ํ๋กํผํฐ๊ฐ ์๋๋ฐ ์ด๊ฒ์ ํตํด ํ์ฌ ์คํฌ๋กค ์ํ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค. ํด๋น scrollingElement ๋ด์ ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง ํ๋กํผํฐ๋ค์ ๋์คํธ๋ญ์ณ๋ง ํ ๋นํ๋ค.
- clientHeight: ์น ๋ธ๋ผ์ฐ์ ์ฐฝ(๋ด์ฉ์ด ๋ณด์ฌ์ง๋ ์์ญ)์ ๋์ด
- scrollTop: ํ์ฌ ์คํฌ๋กค๋ ๋ถ๋ถ์ ๋งจ ์์ ๋์ด(=ํ์ฌ ์คํฌ๋กค์ ์์น)
- scrollHeight: ๋ฌธ์์ ์ด ๋์ด(=์คํฌ๋กค ๋์์ ์ด ๋์ด)
2. '(์ ์ฒด ์คํฌ๋กค ์์ญ) - (ํ์ฌ ์คํฌ๋กค์ ์์น)'์ ๊ฐ์ด (ํ์ฌ ์คํฌ๋กค ๋ ์ํ์์์ ๋ณด์ฌ์ง๋ ์์ญ)๊ณผ ๊ฐ๋ค๋ฉด ๋ ์ด์ ์คํฌ๋กค์
ํ ๊ณต๊ฐ์ด ์๋ค๋ ์๋ฏธ์ด๋ฉฐ ์ด ์์ ์กฐ๊ฑด๋ฌธ ๋ด์ ์ฌ์ฉํ๋ค.
3. ์ด๊ธฐ ์ํ์ ์ดํ ์ ๋ฐ์ดํธ ๋ ๋์ ํ์ด์ง๋ ๋ณ๋๋ก ๊ตฌ์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ผํญ์ฐ์ฐ์๋ฅผ ํตํด ์กฐ๊ฑด์ ๋ง๊ฒ taget ๋ณ์๋ฅผ
๊ฐ๊ธฐ ๋ค๋ฅด๊ฒ ํ ๋นํด ์ค๋ค. (์ด๊ธฐ page ๋ณ์ ๊ฐ์ 0์ด๊ธฐ ๋๋ฌธ์ false)
Refactoring
const loadMore = async () => {
const target = page ? fetchMoreTrigger : app;
target.classList.add("loading");
await renderList(page++);
target.classList.remove("loading");
};
const onScroll = e => {
const {scrollTop, scrollHeight, clientHeight} = e.target.scrollingElement;
if(scrollHeight - scrollTop === clientHeight) {
loadMore();
}
};
'JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Intersection Observer API๋ฅผ ํตํ ์ด๋ฒคํธ ์ต์ ํ (0) | 2021.07.01 |
---|---|
Debounce ํจ์๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ต์ ํ (0) | 2021.07.01 |
ScrollSpy_offsetTop, scrollTop, clientHeight (0) | 2021.06.03 |
Context Menu (0) | 2021.06.01 |
๋ด์ฅ ํจ์ call์ this ๋ฐ์ธ๋ฉ (0) | 2021.04.17 |