less than 1 minute read


๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์—์„œ ๊ตฌํ˜„์„ ๋งก๊ฒŒ๋œ ํŽ˜์ด์ง€์ค‘์— ๋ฉ”์ธํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค. ๋ฉ”์ธํŽ˜์ด์ง€๋Š” ์„œ๋น„์Šค ์†Œ๊ฐœ์™€ ํŽ˜์ด์ง€ ์ด๋™ ์ •๋„์˜ ์ปจํ…์ธ ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ๊ทธ์ค‘ ์„œ๋น„์Šค ์†Œ๊ฐœ ๋ถ€๋ถ„์—๋Š” ์Šคํฌ๋กค ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํฌ๋กค ์œ„์น˜๋ฅผ ์ธก์ •ํ•ด์ค„ useScroll hook์„ ์ž‘์„ฑํ–ˆ๋‹ค.

import { useState, useEffect } from "react";

export const useScroll = () => {
  const [scrollY, setScrollY] = useState(window.scrollY);

  const onScroll = () => {
    setScrollY(window.scrollY);
  };

  useEffect(() => {
    window.addEventListener("scroll", onScroll);
    return () => window.removeEventListener("scroll", onScroll);
  }, []);

  return scrollY;
};

์ฐพ์•„๋ณธ ์˜ˆ์‹œ์—๋Š” X์ถ• ์Šคํฌ๋กค๊นŒ์ง€ ๊ณ„์‚ฐํ•˜๋Š” ์˜ˆ์‹œ๋“ค์ด ๋งŽ์•˜์ง€๋งŒ ๋‚˜๋Š” Y์ถ• ์Šคํฌ๋กค๋งŒ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์•„ Y์ถ• ์Šคํฌ๋กค๋งŒ์„ ์ธก์ •ํ•ด์ฃผ๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ๋ถˆ๋Ÿฌ์˜จ ํ›„ ์Šคํฌ๋กค์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค๋ช…์„ ๋ถ€์—ฌํ•ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

Leave a comment