Framer Motion مكتبة الحركة Motion
آخر تحديث: 2026-11-03
Framer Motion مكتبة الحركة Motion
Framer Motion (المنشورة اليوم كحزمة motion) هي مكتبة الحركة الأشهر في React: صرّح بالحالة الابتدائية والحالة الهدف والانتقال على motion.div فتتكفّل هي بالتحويم بينها. ويتكفّل AnimatePresence بحركات الخروج، وتُدعَم الإيماءات والحركات التخطيطية جاهزًا، ما يجعل المكتبة مناسبة طبيعيًا للواجهات المقادة بالحالة.
| المجموعة | المنظومة والتقدّم |
|---|---|
| النوع | مكتبة |
| منذ الإصدار | v11 (اسم الحزمة الرسمي motion، تُستورَد من motion/react) |
ℹ️ ملاحظة يحوّل المحرّر JSX إلى JavaScript ويعرض الواجهة الحقيقية داخل بيئة معزولة؛ تُركَّب المكوّنات تلقائياً دون استدعاء render يدوي.
📝 الصيغة
npm install motion
import { motion, AnimatePresence } from 'motion/react'
<motion.div
initial={{ opacity: 0, y: -20 }} // initial state
animate={{ opacity: 1, y: 0 }} // target state
exit={{ opacity: 0 }} // exit state (needs AnimatePresence)
transition={{ duration: 0.3, ease: 'easeOut' }} // transition config
>
Content
</motion.div>
// Spring physics: <motion.button whileTap={{ scale: 0.9 }} />
⚙️ المعاملات
| initial / animate | كائنات الأنماط الابتدائية والهدف؛ وتتحوّم المكتبة بينهما كلما تغيّرت قيمة. |
|---|---|
| transition | إعداد الانتقال: المدة، ومنحنى التخفيف، أو معاملات الفيزياء الزنبركية (type: 'spring' و stiffness و damping). |
| AnimatePresence | يُحيط بالعناصر المُصيَّرة شرطيًا كي تُشغَّل حركة الخروج قبل إزالة المكوّن من DOM. |
القيمة المرجعة:لا قيمة مرتجعة — راجع المثال لاستخدام مكتبة الطرف الثالث.
▶ مثال
المثال يعمل مباشرة: يُعرض تلقائياً عند التوسيع وتظهر التعديلات فوراً.
الناتج:
محاكاة: بعد النقر على فتح النافذة يظهر القناع متلاشيًا خلال 0.3 ثانية، وتنبثق اللوحة من حالة منكمشة أعلى إلى وسط الشاشة (تخفيف يشبه الزنبرك)؛ والنقر على القناع أو زر الإغلاق يُخفيه مجددًا. وهذا يوضّح نهج الحركة التصريحي المقاد بالحالة مضافًا إليه انتقال CSS الذي ينفّذه Framer Motion الحقيقي عبر motion.div و AnimatePresence.
💡 النقاط الأساسية
💡 نصيحة خاصية exit مع AnimatePresence هما الثنائي القياسي لخروج النوافذ والعناصر القائمة؛ فلا يستطيع CSS العادي تحريك عنصر يجري فك تركيبه.
ℹ️ ملاحظة منذ v11 أصبحت الحزمة الرسمية motion بواجهة شبه متطابقة ومسار الاستيراد motion/react؛ وتبقى حزمة framer-motion القديمة تعمل.
⚠️ تحذير مع مئات العناصر المتحركة على الشاشة، راقب الأداء: فضّل transform و opacity، أو حدّد نطاق انتقالات CSS والحركات التخطيطية.
🏷️ المزيد من المنظومة
💡 حالات ذات صلة
المزيد من الحالات قريباً.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
س كيف أختار بين Framer Motion و CSS animation؟
ج يكفي CSS العادي للتأثيرات البسيطة عند المرور والتلاشي؛ واستخدم Framer Motion عندما تحتاج تنسيقًا مقادًا بالحالة، وحركات خروج، وتفاعلًا بالإيماءات، وفيزياء زنبركية أو حركات تخطيطية — فهي تقرأ حالة React مباشرة.
س ماذا يفعل AnimatePresence؟
ج عندما يفك React تركيب عنصر يزيل عقدة DOM فورًا، فلا تتاح لـ CSS فرصة تشغيل حركة خروج. أما AnimatePresence فيؤجّل فك التركيب ليكتمل تشغيل حركة الخروج قبل إزالة العقدة فعليًا.
س ما العلاقة بين حزمة motion الجديدة و framer-motion؟
ج بعد Framer Motion v11 أصدر الفريق حزمة motion مستقلة بواجهة متوافقة: يصبح الاستيراد motion/react وتعمل أيضًا مع JavaScript العادي. وتبقى الحزمة القديمة مدعومة، والمشاريع الجديدة تبدأ بـ motion.