framer-motion
اجرای اصول ۱۲گانه انیمیشن دیزنی در React با Framer Motion
این اسکیل به شما کمک میکند اصول ۱۲گانه انیمیشن دیزنی را در پروژههای React با API اعلانی Framer Motion پیادهسازی کنید؛ از squash and stretch و anticipation تا timing، arc و exaggeration.
با استفاده از variants، transition، gestureها، AnimatePresence و layout میتوانید حرکتهایی طبیعیتر، خواناتر و حرفهایتر برای رابطهای کاربری و صحنههای تعاملی بسازید.
چه چیزی میگیرید
- الگوهای آماده برای پیادهسازی ۱۲ اصل انیمیشن دیزنی
- نمونهکدهای React برای `animate`، `variants` و `transition`
- تنظیم timing، easing، spring و stagger برای حرکتهای دقیق
- انیمیشنهای تعاملی با `whileHover` و `whileTap`
- پشتیبانی از exit animation، کنترل برنامهای و تغییرات خودکار layout
برای چه کاری خوب است
- توسعهدهندگان React که میخواهند رابطهای کاربری زندهتر و حرفهایتر بسازند
- طراحان محصول و motion designerهایی که برای prototype یا محصول نهایی به انیمیشن تعاملی نیاز دارند
- پروژههایی که حرکت کاراکتر، کارت، دکمه، لیست یا تغییر وضعیت صفحه دارند
برای چه کاری نیست
- پروژههایی که به رندر ویدیوی نهایی یا تدوین سینمایی با FFmpeg و ابزارهای مشابه نیاز دارند
- محیطهایی که React یا JavaScript در آنها قابل استفاده نیست
- انیمیشنهای بسیار پیچیده سهبعدی یا شبیهسازی فیزیک که به موتور تخصصی نیاز دارند
دربارهٔ این اسکیل
Framer Motion Animation Principles
Implement all 12 Disney animation principles using Framer Motion's declarative React API.
1. Squash and Stretch
<motion.div
animate={{ scaleX: [1, 1.2, 1], scaleY: [1, 0.8, 1] }}
transition={{ duration: 0.3, times: [0, 0.5, 1] }}
/>
2. Anticipation
<motion.div
variants={{
idle: { y: 0, scaleY: 1 },
anticipate: { y: 10, scaleY: 0.9 },
jump: { y: -200 }
}}
initial="idle"
animate={["anticipate", "jump"]}
transition={{ duration: 0.5, times: [0, 0.2, 1] }}
/>
3. Staging
<motion.div animate={{ filter: "blur(3px)", opacity: 0.6 }} /> {/* bg */}
<motion.div animate={{ scale: 1.1, zIndex: 10 }} /> {/* hero */}
4. Straight Ahead / Pose to Pose
<motion.div
animate={{
x: [0, 100, 200, 300],
y: [0, -50, 0, -30]
}}
transition={{ duration: 1, ease: "easeInOut" }}
/>
5. Follow Through and Overlapping Action
<motion.div animate={{ x: 200 }} transition={{ duration: 0.5 }}>
<motion.span
animate={{ x: 200 }}
transition={{ duration: 0.5, delay: 0.05 }} // hair
/>
<motion.span
animate={{ x: 200 }}
transition={{ duration: 0.6, delay: 0.1 }} // cape
/>
</motion.div>
6. Slow In and Slow Out
<motion.div
animate={{ x: 300 }}
transition={{
duration: 0.6,
ease: [0.42, 0, 0.58, 1] // easeInOut cubic-bezier
}}
/>
// Or use: "easeIn", "easeOut", "easeInOut"
7. Arc
<motion.div
animate={{
x: [0, 100, 200],
y: [0, -100, 0]
}}
transition={{ duration: 1, ease: "easeInOut" }}
/>
8. Secondary Action
<motion.button
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.95 }}
>
<motion.span
animate={{ rotate: [0, 10, -10, 0] }}
transition={{ duration: 0.3 }}
>
Icon
</motion.span>
</motion.button>
9. Timing
const timings = {
fast: { duration: 0.15 },
normal: { duration: 0.3 },
slow: { duration: 0.6 },
spring: { type: "spring", stiffness: 300, damping: 20 }
};
10. Exaggeration
<motion.div
animate={{ scale: 1.5, rotate: 720 }}
transition={{
type: "spring",
stiffness: 200,
damping: 10 // low damping = overshoot
}}
/>
11. Solid Drawing
<motion.div
style={{ perspective: 1000 }}
animate={{ rotateX: 45, rotateY: 30 }}
transition={{ duration: 0.5 }}
/>
12. Appeal
<motion.div
whileHover={{
scale: 1.02,
boxShadow: "0 20px 40px rgba(0,0,0,0.2)"
}}
transition={{ duration: 0.3 }}
/>
Stagger Children
const container = {
hidden: { opacity: 0 },
show: {
opacity: 1,
transition: { staggerChildren: 0.1 }
}
};
<motion.ul variants={container} initial="hidden" animate="show">
{items.map(item => <motion.li variants={itemVariant} />)}
</motion.ul>
Key Framer Motion Features
animate- Target statevariants- Named animation stateswhileHover/whileTap- Gesture animationstransition- Timing and easingAnimatePresence- Exit animationsuseAnimation- Programmatic controllayout- Auto-animate layout changes