Framer Motion의 공식문서를 읽고, 정리하는 개념으로 적는 글입니다.
혹시라도 오타가 있는 경우 말씀해주세요 🏃♀️🚶♂️
import { motion } from 'framer-motion';
<motion.div animate={{ x: 100 }} />
motion.
을 적어준다. animate
prop을 사용하여 다양한 애니메이션을 넣을 수 있음.<motion.div
animate={{ x: 100 }}
1️⃣ transition={{ ease: "easeOut", duration: 2 }}
2️⃣ transition={{ type: "spring", stiffness: 100 }}
3️⃣ transition={{ yoyo: infinity | 10 }}
/>
Transitions
prop을 사용하여 애니메이션을 자연스럽게 할 수 있다.Tween
Spring
Inertia
spring
의 경우 stiffness
으로 추가 설정 가능 (스프링의 강도)<motion.div animate={{ x: 100 }} initial={false} />
initial={false}
입력 시, 처음에만 애니메이션이 동작되도록 설정할 수 있다.import { motion } from "framer-motion"
export const MyComponent = () => (
<motion.div
animate={{
scale: [1, 2, 2, 1, 1],
rotate: [0, 0, 270, 270, 0],
borderRadius: ["20%", "20%", "50%", "50%", "20%"],
}}
/>
)
null
을 입력하면 된다.const sayHello = {
visible: { opacity: 1 },
hidden: { opacity: 0 },
}
<motion.div
initial="hidden"
animate="visible"
variants={sayHello}
/>
🌟 어떻게 사용하는지 제대로 보여지도록 sayHello
라는 이상한 변수 이름을 줘봤다.
1. 태그 밖에 모션에 관련된 여러 속성을 넣은 객체를 만든다. 👉 sayHello
객체
2. 해당 모션 컴포넌트를 variants
prop을 통해 전달하여 사용할 수있게 함.
3. 그 후 원하는 부분에 해당 객체의 key를 string의 형태로 입력하면 사용할 수 있게 됨 (이미 variants prop을 통해 컴포넌트를 전달해줬기 때문에 사용할 수 있음)
const list = {
visible: { opacity: 1 },
hidden: { opacity: 0 },
}
const item = { // 참고로 item은 해당 값을 사용한다!
visible: { opacity: 1, x: 0 },
hidden: { opacity: 0, x: -100 },
}
return (
<motion.ul
initial="hidden"
animate="visible"
variants={list}
>
<motion.li variants={item} />
<motion.li variants={item} />
<motion.li variants={item} />
</motion.ul>
)
li
는 ul
의 animate
과 variants
prop 값을 보고 값을 사용한다.delay
같은 속성을 추가하지 않는이상 모두 같은 시간에 시작한다. 하지만 variants
prop을 사용하게 되면 transition
에 새로운 속성을 사용할 수 있다
when
delayChildren
staggerChildren
transition
속성 안에서 사용할 수 있고, parent에 사용할 수 있음.when
은 시기를 선택할 수 있다. → "beforeChildren" "afterChildren"staggerChildren
은 자식을 순서대로 애니메이션 할 수 있게 만들어 준다.staggerChildren: 0.4
: 각 children component는 0.4초마다 애니메이션이 진행된다.motion
컴포넌트는 다양한 제스처 애니메이션 prop을 가지고 있다.whileHover
, whileTap
, whileFocus
, whileDrag
,whileInView
whileHover
외에도 onHoverStart
와 onHoverEnd
라는 콜백함수를 가지고 있음.// As values
<motion.div initial={{ opacity: 1 }} />
// As variant
<motion.div initial="visible" variants={variants} />
// Multiple variants
<motion.div initial={["visible", "active"]} variants={variants} />
// As false (disable mount animation)
<motion.div initial={false} animate={{ opacity: 0 }} />