📋 محتويات الصفحة
📖 الوصف
Framer Motion هي مكتبة رسوم متحركة مصممة خصيصاً لـ React. توفر API بسيطة وقوية لإنشاء animations وtransitions مع declarative syntax. من تطوير Framer (أداة تصميم). Framer Motion 11 أحدث إصدار يوفر performance محسّن، Layout animations، وgestures مدمج. تُعتبر الخيار الأول لـ React animations.
🎯 يستخدم في
مجالات استخدام هذه الأداة
React applications
Page transitions
Gestures (drag
tap
hover)
Layout animations
Exit animations
✨ المميزات
أبرز مميزات هذه الأداة
React-native API
declarative syntax
Layout animations
Gestures مدمج (drag
tap
hover)
Exit animations
Variants للـ complex animations
Performance محسّن
TypeScript support
⚠️ العيوب
نقاط يجب مراعاتها
مخصص لـ React فقط
Bundle size متوسط
Learning curve للميزات المتقدمة
أقل مرونة من GSAP
🔄 البدائل
أدوات بديلة يمكنك استخدامها
💻 مثال على الاستخدام
كيفية استخدام هذه الأداة
import { motion, AnimatePresence } from 'framer-motion';
// Basic animation
function Box() {
return (
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -20 }}
transition={{ duration: 0.3 }}
>
محتوى
</motion.div>
);
}
// Gestures
function Draggable() {
return (
<motion.div
drag
dragConstraints={{ left: -100, right: 100 }}
whileDrag={{ scale: 1.1 }}
whileTap={{ scale: 0.95 }}
>
اسحبني
</motion.div>
);
}
// Variants
const container = {
hidden: { opacity: 0 },
show: {
opacity: 1,
transition: { staggerChildren: 0.1 }
}
};
const item = {
hidden: { opacity: 0, y: 20 },
show: { opacity: 1, y: 0 }
};
function List() {
return (
<motion.ul variants={container} initial="hidden" animate="show">
{items.map(item => (
<motion.li key={item.id} variants={item}>
{item.text}
</motion.li>
))}
</motion.ul>
);
}
// Exit animations
function Modal({ isOpen }) {
return (
<AnimatePresence>
{isOpen && (
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
>
محتوى النموذج
</motion.div>
)}
</AnimatePresence>
);
}
// Layout animations
function Layout() {
const [isOpen, setIsOpen] = useState(false);
return (
<motion.layout
layout
onClick={() => setIsOpen(!isOpen)}
>
{isOpen ? 'مفصل' : 'ملخص'}
</motion.layout>
);
}
📚 أدوات أخرى في Animation
قد يعجبك أيضاً
Anime.js
⭐مكتبة رسوم متحركة JavaScript (JavaScript Animation Library)
AutoAnimate
مكتبة رسوميات تلقائية بدون إعداد مسبق
GSAP
⭐مكتبة رسوم متحركة قوية (Powerful Animation Library)
Lenis
⭐مكتبة Smooth Scroll (Smooth Scroll Library)
Lottie
⭐مكتبة رسوم متحركة JSON-based (JSON Animation Library)
Motion One
مكتبة رسوميات خفيفة وعالية الأداء للويب