/react-dotLottie-hooks

React hook that simplifies scroll-driven DotLottie animations by integrating DotLottie and GSAP ScrollTrigger.

Primary LanguageTypeScriptMIT LicenseMIT

๐ŸŽฏ React DotLottie Hooks v1.2.7

๋ชจ๋˜ํ•œ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ DotLottie ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ›…

โœจ DotLottie + GSAP ScrollTrigger๋กœ ๋ฉ‹์ง„ ์Šคํฌ๋กค ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”!

v1.2.7์€ ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „์ž…๋‹ˆ๋‹ค - 4๊ฐ€์ง€ ์ฃผ์š” React ํ”„๋ ˆ์ž„์›Œํฌ ์™„์ „ ์ง€์›

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

pnpm-monorepo/
โ”œโ”€โ”€ packages/
โ”‚   โ””โ”€โ”€ react-lottie-hooks/     # ๐ŸŽฏ ๋ฉ”์ธ ํ›… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ””โ”€โ”€ examples/
    โ”œโ”€โ”€ nextjs-example/         # Next.js ์˜ˆ์ œ
    โ”œโ”€โ”€ vite-example/           # Vite ์˜ˆ์ œ
    โ”œโ”€โ”€ remix-example/          # Remix ์˜ˆ์ œ
    โ””โ”€โ”€ react-router-example/   # React Router ์˜ˆ์ œ

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. ํŒจํ‚ค์ง€ ์„ค์น˜

# pnpm (๊ถŒ์žฅ)
pnpm add @jurneyx2/react-lottie-hooks @lottiefiles/dotlottie-react gsap

# npm
npm install @jurneyx2/react-lottie-hooks @lottiefiles/dotlottie-react gsap

# yarn
yarn add @jurneyx2/react-lottie-hooks @lottiefiles/dotlottie-react gsap

2. ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

import React from "react";
import { DotLottieReact } from "@lottiefiles/dotlottie-react";
import { useLottieScrollTrigger } from "@jurneyx2/react-lottie-hooks";

export default function MyComponent() {
  const { triggerRef, lottieContainerRef, handleDotLottieRef, isLoaded } =
    useLottieScrollTrigger({
      start: "top center",
      end: "bottom center",
      debug: process.env.NODE_ENV === "development",
    });

  return (
    <div>
      {/* ์Šคํฌ๋กค ํŠธ๋ฆฌ๊ฑฐ ์˜์—ญ */}
      <div ref={triggerRef} style={{ height: "100vh" }}>
        <h2>์Šคํฌ๋กคํ•˜๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค!</h2>
      </div>

      {/* DotLottie ์• ๋‹ˆ๋ฉ”์ด์…˜ */}
      <div ref={lottieContainerRef}>
        <DotLottieReact
          src="/my-animation.lottie"
          loop={false}
          autoplay={false}
          dotLottieRefCallback={handleDotLottieRef}
        />
      </div>

      {isLoaded && <p>์• ๋‹ˆ๋ฉ”์ด์…˜ ๋กœ๋“œ ์™„๋ฃŒ! โœจ</p>}
    </div>
  );
}

๐Ÿ“ฆ ํŒจํ‚ค์ง€

๋ฉ”์ธ ํ›… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ํŠน์ง•:

  • ๐ŸŽจ DotLottie ์ „์šฉ: @lottiefiles/dotlottie-react ์™„๋ฒฝ ์ง€์›
  • ๐Ÿ“ฑ SSR/CSR ์•ˆ์ „: Next.js, Remix, React-Router v7 ๋“ฑ ์™„๋ฒฝ ์ง€์›
  • ๐ŸŽฏ GSAP ScrollTrigger: ์Šคํฌ๋กค ๊ธฐ๋ฐ˜ ์• ๋‹ˆ๋ฉ”์ด์…˜
  • ๐Ÿ”ง TypeScript: ์™„์ „ํ•œ ํƒ€์ž… ์•ˆ์ „์„ฑ
  • โšก ์ตœ์ ํ™”: ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ

๐ŸŽจ ์˜ˆ์ œ

Next.js Example Demo

Next.js ์˜ˆ์ œ

  • ๐Ÿ“ examples/nextjs-example
  • ๐ŸŒ App Router ์‚ฌ์šฉ
  • โœจ ๊ธฐ๋ณธ & ๊ณ ๊ธ‰ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ๋ชจ
  • ๐ŸŽฏ SSR ์•ˆ์ „์„ฑ ์‹œ์—ฐ

์‹คํ–‰ ๋ฐฉ๋ฒ•:

cd examples/nextjs-example
pnpm install
pnpm dev
# http://localhost:3000์—์„œ ํ™•์ธ

Vite ์˜ˆ์ œ

  • ๐Ÿ“ examples/vite-example
  • โšก ๋น ๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
  • ๐ŸŽจ Tailwind CSS ์Šคํƒ€์ผ๋ง
  • ๐ŸŽฏ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€

์‹คํ–‰ ๋ฐฉ๋ฒ•:

cd examples/vite-example
pnpm install
pnpm dev
# http://localhost:5173์—์„œ ํ™•์ธ

Remix ์˜ˆ์ œ

  • ๐Ÿ“ examples/remix-example
  • ๐Ÿƒ ์ตœ์‹  Remix ํ”„๋ ˆ์ž„์›Œํฌ
  • ๐ŸŽจ Tailwind CSS ์Šคํƒ€์ผ๋ง
  • ๐Ÿ”„ SSR/CSR ์•ˆ์ „์„ฑ ์‹œ์—ฐ

์‹คํ–‰ ๋ฐฉ๋ฒ•:

cd examples/remix-example
pnpm install
pnpm dev
# http://localhost:5173์—์„œ ํ™•์ธ

React Router ์˜ˆ์ œ

  • ๐Ÿ“ examples/react-router-example
  • ๐Ÿšฆ ์ตœ์‹  React Router 7
  • ๐ŸŽจ Tailwind CSS 4.0 ์Šคํƒ€์ผ๋ง
  • ๐Ÿ“‚ ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…

์‹คํ–‰ ๋ฐฉ๋ฒ•:

cd examples/react-router-example
pnpm install
pnpm dev
# http://localhost:5173์—์„œ ํ™•์ธ

๐ŸŽฅ ๋ชจ๋“  ์˜ˆ์ œ ๊ณตํ†ต ๊ธฐ๋Šฅ

Common Features Demo

๋ชจ๋“  ์˜ˆ์ œ์—๋Š” ๋‹ค์Œ ๊ธฐ๋Šฅ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๐ŸŽฌ ์Šคํฌ๋กค ํŠธ๋ฆฌ๊ฑฐ ์• ๋‹ˆ๋ฉ”์ด์…˜: ์Šคํฌ๋กค์— ๋”ฐ๋ฅธ ๋ถ€๋“œ๋Ÿฌ์šด DotLottie ์• ๋‹ˆ๋ฉ”์ด์…˜
  • โฏ๏ธ ์ˆ˜๋™ ์žฌ์ƒ/์ผ์‹œ์ •์ง€ ์ปจํŠธ๋กค: ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ˆ˜๋™ ์ œ์–ด
  • ๐Ÿ” ์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊ทธ ์ •๋ณด: ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ƒํƒœ ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œ
  • ๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ: ๋ชจ๋ฐ”์ผ ์นœํ™”์  ๋ ˆ์ด์•„์›ƒ
  • โšก ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง: ํ”„๋ ˆ์ž„๋ฅ  ๋ฐ ์ƒํƒœ ์ถ”์ 
  • ๐Ÿ”„ ๋ชจ๋“œ ์ „ํ™˜: ์Šคํฌ๋กค/์ˆ˜๋™ ์ œ์–ด ๋ชจ๋“œ ํ† ๊ธ€

๐Ÿ› ๏ธ ๊ฐœ๋ฐœ

์š”๊ตฌ์‚ฌํ•ญ

  • Node.js 16+
  • pnpm 8+

์„ค์น˜

git clone <repository-url>
cd pnpm-monorepo
pnpm install

๋นŒ๋“œ

# ์ „์ฒด ๋นŒ๋“œ
pnpm build

# ํŒจํ‚ค์ง€๋งŒ ๋นŒ๋“œ
pnpm build:packages

# ์˜ˆ์ œ๋งŒ ๋นŒ๋“œ
pnpm build:examples

๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

# ๋ชจ๋“  ์˜ˆ์ œ ์‹คํ–‰
pnpm dev

# ํŠน์ • ์˜ˆ์ œ๋งŒ ์‹คํ–‰
cd examples/nextjs-example
pnpm dev

๐Ÿ†š v1.2.7 ์ฃผ์š” ํŠน์ง• (์ตœ์‹  ๋ฒ„์ „)

โœจ ์ƒˆ๋กœ์šด ๊ฐœ์„ ์‚ฌํ•ญ

  • ๐ŸŒ ์™„์ „ํ•œ ๋‹ค๊ตญ์–ด ์ง€์›: ๋ชจ๋“  ๋””๋ฒ„๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ํ•œ๊ตญ์–ด/์˜์–ด ์ง€์›
    const hook = useLottieScrollTrigger({
      debug: true,
      debugLanguage: "en", // "ko" | "en"
    });
  • ๐Ÿ”ง ES Module ํ˜ธํ™˜์„ฑ: ๋ชจ๋“  ๋ฒˆ๋“ค๋Ÿฌ(Vite, Webpack, esbuild)์—์„œ ์•ˆ์ •์  ๋™์ž‘
  • ๐Ÿ“ฆ ๋ชจ๋“ˆ ํ•ด๊ฒฐ ๊ฐœ์„ : gsap/ScrollTrigger ๊ฒฝ๋กœ๋กœ ํ‘œ์ค€ํ™”
  • ๐Ÿ› ๏ธ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜: ์–ธ์–ด๋ณ„ ๋””๋ฒ„๊ทธ ๋ฉ”์‹œ์ง€๋กœ ๋” ๋‚˜์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜

โœ… ๊ธฐ์กด ๋ฒ„์ „ ๋Œ€๋น„ ๊ฐœ์„ ๋œ ์ 

  • ๋‹จ์ˆœํ™”: DotLottie ์ „์šฉ์œผ๋กœ API๊ฐ€ ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด์กŒ์Šต๋‹ˆ๋‹ค
  • ์„ฑ๋Šฅ: ๋‹จ์ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์›์œผ๋กœ ๋ฒˆ๋“ค ํฌ๊ธฐ ๊ฐ์†Œ
  • ์•ˆ์ •์„ฑ: ๋ณต์žกํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋กœ์ง ์ œ๊ฑฐ
  • ํƒ€์ž… ์•ˆ์ „์„ฑ: DotLottie ์ „์šฉ ํƒ€์ž…์œผ๋กœ ๋” ์ •ํ™•ํ•จ
  • ํ”„๋ ˆ์ž„์›Œํฌ ์ง€์›: Next.js, Vite, Remix, React Router ์™„์ „ ์ง€์›

๐Ÿ’” Breaking Changes (v1.1.x์—์„œ)

  • mode ์˜ต์…˜ ์ œ๊ฑฐ (DotLottie๋งŒ ์ง€์›)
  • animationData, path, renderer ๋“ฑ lottie-web ์˜ต์…˜ ์ œ๊ฑฐ
  • lottie-web ์˜์กด์„ฑ ์™„์ „ ์ œ๊ฑฐ

์ž์„ธํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ๋Š” CHANGELOG.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ“– ์ž์„ธํ•œ ๋ฌธ์„œ

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. ์ด ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•˜์„ธ์š”
  2. ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“œ์„ธ์š” (git checkout -b feature/amazing-feature)
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•˜์„ธ์š” (git commit -m 'feat: add amazing feature')
  4. ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œํ•˜์„ธ์š” (git push origin feature/amazing-feature)
  5. Pull Request๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”

๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License - ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

  • @lottiefiles/dotlottie-react - ํ›Œ๋ฅญํ•œ DotLottie React ์ปดํฌ๋„ŒํŠธ
  • GSAP - ๊ฐ•๋ ฅํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • React ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋ชจ๋“  ๊ธฐ์—ฌ์ž๋“ค

๐Ÿ’ก ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ์‹œ๋ฉด Issues์— ๋‚จ๊ฒจ์ฃผ์„ธ์š”!

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ