scroll ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„

2024. 10. 27. 22:21ยทWhat I Learn

ํ”„๋กœ์ ํŠธ ๋‹น์‹œ์—๋Š” 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
'What I Learn' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • TanStack Query์™€ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•œ cursor ๋ฐฉ์‹์˜ ๋ฌดํ•œ ์Šคํฌ๋กค
  • Toast ์ ์šฉ๊ธฐ
  • Next.js ๋ณ‘๋ ฌ ๋ผ์šฐํŒ… & ๊ฒฝ๋กœ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ํ†ตํ•œ ๋ชจ๋‹ฌ ํŽ˜์ด์ง€ ๊ตฌํ˜„
  • OSSCA: LLM ์กฐ์‚ฌ, Continue ๋ถ„์„ ๋ฐ ์ •๋ฆฌ
nuew
nuew
๐Ÿคธ ์žฌ์ฃผ ๋„˜๋Š” ์ค‘
  • nuew
    bloggg. . .๐Ÿฆ–๐Ÿ’ฅ
    nuew
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (88)
      • issue (10)
      • baekjoon (41)
      • lecture recap (11)
      • What I Learn (26)
      • retrospective (0)
      • maeil-mail (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ•œ์ž…ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    JavaScript
    media-query
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
    modal
    zustand
    Study
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    what i learn
    Algorithm
    TailwindCSS
    Baekjoon
    issue
    css
    TypeScript
    Node.js
    js
    ํ•œ์ž…ํฌ๊ธฐ๋กœ์ž˜๋ผ๋จน๋Š”ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
    ๋ฐฑ์ค€
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
nuew
scroll ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”