- بواسطة x32x01 ||
بص يا سيدي 😎، لو شغال على مشروع React ومحتاج تضيف شوية حركات حلوة و[Animations] تخلي الـ[UI] بتاعك حي واحترافي، أفضل حاجة أرشحها ليك هي مكتبة Framer Motion، مكتبة بسيطة وسهلة وفي نفس الوقت قوية جدا في التحكم في الحركات بطريقة مش معقدة زي [CSS] أو [JavaScript] 💪.
الميزة هنا إنك متحكم في كل حاجة حرفياً، والمدة الزمنية للـAnimation هتكون 1 ثانية.
الـ[x] بيبدأ من -100px (بره الشاشة من الشمال) وبيتحرك للمكان الطبيعي، وقيمة الـ[stiffness] تتحكم في مرونة الحركة وسرعتها.
كمان ممكن تضيف drag أو click بنفس الطريقة.
الميزات هنا إنك تتحكم في أكتر من خاصية في نفس الوقت.
الـVariants بتخليك تتحكم في كل عنصر بطريقة مستقلة من مكان واحد، وده مفيد جداً لو عندك مكونات كتير.
ايه هي Framer Motion؟ 🤔
Framer Motion بتخليك تضيف [Animations] للعناصر بتاعتك بشكل سهل، ومبنية مخصوص لـ React، فهتلاقيها شغالة بنفس فكرة الـ [Components] اللي انت متعود عليها، يعني أي عنصر ممكن يتحرك ويتفاعل بسهولة بدون كود معقد.1️⃣ أول خطوة: تثبيت المكتبة
زي أي مكتبة [React]، هتفتح الـ[Terminal] وتكتب الأمر ده: كود:
npm install framer-motion 2️⃣ مثال بسيط: Fade In عند فتح الصفحة 🌅
هنعمل عنصر يعمل Fade In لما الصفحة تفتح باستخدام [motion.div]: JavaScript:
import { motion } from "framer-motion";
const MyComponent = () => {
return (
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 1 }}
> <h1>نور النور</h1>
</motion.div>
);
}; 3️⃣ حركات معقدة: Transitions 🎢
ممكن تحرك العنصر من مكان لمكان أو تغير حجمه باستخدام Spring: JavaScript:
<motion.div
initial={{ x: -100 }}
animate={{ x: 0 }}
transition={{ type: "spring", stiffness: 100 }}
>
<h1>اتحركنا بنجاح!</h1>
</motion.div> 4️⃣ التفاعلات: Gestures 🎮
ممكن تضيف تفاعلات زي تكبير العنصر لما تعدي عليه بالماوس: JavaScript:
<motion.button
whileHover={{ scale: 1.2 }}
>
اضغطني يا معلم
</motion.button> 5️⃣ Keyframes 🔑
زي ما بنعمل في [CSS]، ممكن تستخدم [Keyframes] لحركات معقدة: JavaScript:
<motion.div
animate={{ x: [0, 50, 100, 50, 0], opacity: [1, 0.5, 1] }}
transition={{ duration: 2 }}
>
أي حاجة هنا
</motion.div> 6️⃣ Variants: تحكم منظم في الحركات 📊
لو عندك أكتر من عنصر وعايز كل واحد يتحرك بطريقة مختلفة: JavaScript:
const variants = {
hidden: { opacity: 0, x: -100 },
visible: { opacity: 1, x: 0 },
};
<motion.div
variants={variants}
initial="hidden"
animate="visible"
transition={{ duration: 1 }}
>
هنا بقى وووو
</motion.div> ليه تستخدم Framer Motion؟ 🤩
- API بسيط لكل أنواع الحركات زي fade و keyframes.
- المكتبة خفيفة وسريعة ومبنية متوافقة تماماً مع [React] عشان الأداء مش يتأثر.
- سهولة إضافة hover effects، drag، tap، وأي تفاعلات بسرعة وسلاسة.
