ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

https://choi95.tistory.com/56

 

Infinite Scroll

Question 1. ์ตœ์ดˆ์—๋Š” 20๊ฐœ์˜ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. 2. ์Šคํฌ๋กค์„ ์ตœํ•˜๋‹จ์œผ๋กœ ์ด๋™์‹œ 'loading' ์ƒํƒœ ํ‘œ์‹œ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉฐ, ์ดํ›„์˜ 20๊ฐœ ๋ชฉ๋ก์„ ๋” ๊ฐ€์ ธ์˜จ๋‹ค. 3. ๋กœ๋”ฉ ์™„๋ฃŒ์‹œ 'loading'ํ‘œ์‹œ๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉฐ, ๊ฐ€์ ธ์˜จ ๋ชฉ๋ก

choi95.tistory.com

์ด์ „ ํฌ์ŠคํŒ…์—์„œ onScroll ์ด๋ฒคํŠธ์˜ scrollingElement ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ๋ฌดํ•œ ์Šคํฌ๋กค ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด์™€ ๊ฐ™์ด onScroll ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ง€์†์ ์œผ๋กœ ๊ฐ์ง€ํ•  ๊ฒฝ์šฐ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ๋“ค์ด ์Šคํฌ๋กค ์ด๋ฒคํŠธ๊ฐ€

๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

 

Throttle๊ณผ Debounce

์ด๋Ÿฌํ•œ ๋ฐ˜๋ณต์ ์ธ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  • Throttle: ์ผ์ •์‹œ๊ฐ„๊ฐ„๊ฒฉ์œผ๋กœ ํ•œ๋ฒˆ์”ฉ๋งŒ ์‹คํ–‰
  • Debounce: ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰

setTimeout()๊ณผ clearTimeout() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ Debounce() ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ฃผ์–ด์ง„ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๋งˆ์ง€๋ง‰์œผ๋กœ ์š”์ฒญํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.

(clearTimeout()์„ ํ†ตํ•ด ๋ฐ˜๋ณต ์ˆ˜ํ–‰์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์‚ฌ์ „์— ์‹๋ณ„ ๋ณ€์ˆ˜๋ฅผ null๋กœ ์„ ์–ธํ•˜์—ฌ ์ฃผ๊ณ  ํด๋กœ์ €๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ํ™œ์šฉํ•œ๋‹ค)

 

Code

export const debounce = (func, delay) => {
  let timeoutId = null;
  return function (...args) {
    const context = this;
    if(timeoutId) clearTimeout(timeoutId);
    timeoutId = setTimeout(() => func.apply(context, args), delay);
  }
};

 

'JS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Dark-mode  (0) 2021.07.02
Intersection Observer API๋ฅผ ํ†ตํ•œ ์ด๋ฒคํŠธ ์ตœ์ ํ™”  (0) 2021.07.01
Infinite Scroll  (0) 2021.07.01
ScrollSpy_offsetTop, scrollTop, clientHeight  (0) 2021.06.03
Context Menu  (0) 2021.06.01
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2024/10   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ