animate="scroll" vs animate={navAnimation} μ°¨μ΄
β
framer-motion animate="μν" vs animate={useAnimation()} μ°¨μ΄ μ 리
1. κΈ°λ³Έ κ°λ
| λΉκ΅ νλͺ© | animate="scroll" | animate={navAnimation} |
|---|
| νμ
| λ¬Έμμ΄ (string) | μ λλ©μ΄μ
컨νΈλ‘€λ¬ κ°μ²΄ |
| λμ λ°©μ | κ³ μ λ μνλ§ μ¬μ© | 쑰건μ λ°λΌ μν μ ν κ°λ₯ |
| μν λ³κ²½ | μλ | νλ‘κ·Έλλ°μ μΌλ‘ μλ μ‘°μ (start()) |
| μ¬μ© μ | λ¨μν μ λλ©μ΄μ
| μ€ν¬λ‘€, ν΄λ¦ λ± μ¬μ©μ μνΈμμ©μ λ°λ₯Έ λμ μ μ΄ |
2. μ½λ λΉκ΅ μμ
<motion.div
variants={{
initial: { backgroundColor: "blue" },
scroll: { backgroundColor: "black" },
}}
initial="initial"
animate="scroll"
>
μ μ μΈ μ λλ©μ΄μ
</motion.div>
π‘ animate={useAnimation()}: 쑰건 κΈ°λ° μ λλ©μ΄μ
const controls = useAnimation();
const { scrollY } = useViewportScroll();
useEffect(() => {
scrollY.onChange(() => {
if (scrollY.get() > 100) {
controls.start("scrolled");
} else {
controls.start("top");
}
});
}, [scrollY, controls]);
return (
<motion.div
variants={{
top: { backgroundColor: "blue" },
scrolled: { backgroundColor: "black" },
}}
initial="top"
animate={controls}
>
μ€ν¬λ‘€μ λ°λΌ λμ μΌλ‘ μ λ³κ²½λ¨
</motion.div>
);
3. π μΈμ useAnimation()μ μ°λ©΄ μ’μκΉ?
| μν© | μ€λͺ
|
|---|
| β
μ€ν¬λ‘€ μμΉμ λ°λΌ λ°°κ²½μ, μμΉ λ±μ λ°κΎΈκ³ μΆμ λ | ex. ν€λκ° μ€ν¬λ‘€ μ ν¬λͺ
β κ²μ λ°°κ²½μΌλ‘ λ°λλ ν¨κ³Ό |
| β
ν΄λ¦ λλ μ¬μ©μ λμμΌλ‘ μ λλ©μ΄μ
μ΄ λ°λμ΄μΌ ν λ | ex. κ²μ λ²νΌ ν΄λ¦ μ input μ°½μ΄ νμ₯λλ ν¨κ³Ό |
| β
μ¬λ¬ μ λλ©μ΄μ
μ λμμ μ μ΄ν΄μΌ ν λ | ex. λ€μ μ»΄ν¬λνΈ μνλ₯Ό νλμ 쑰건μΌλ‘ μ μ΄ν λ |
| β
νμ΄λ°μ μ‘°μ νκ±°λ μνλ₯Ό μ°μ μ νν λ | ex. νΉμ μ‘°κ±΄μ΄ λ§μ‘±λ λλ§λ€ .start()λ‘ νλ¦ μ μ΄ |
π§ λ§λ¬΄λ¦¬ μ 리
- λ¨μν "λ€μ΄μ¬ λ νλ²λ§ μ€ν"λλ μ λλ©μ΄μ
μ΄λ©΄
animate="μν"λ‘ μΆ©λΆν©λλ€.
- νμ§λ§ μ¬μ©μ μ
λ ₯, 쑰건문, μ¬λ¬ μνμμ μ μ΄ν΄μΌ ν λλ λ°λμ
useAnimation()μ μ¬μ©νλ κ²μ΄ μ 리ν©λλ€.