رسوم CSS المتحركة بإطاراتها المفتاحية مع React
طبّقوا رسوم @keyframes المتحركة وأزيلوها ديناميكيًا استنادًا إلى حالة المكوّن وأحداثه.
رسوم CSS المتحركة بإطاراتها المفتاحية مع React درس مجاني في React Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
تعريف @keyframes
تصف قاعدة @keyframes حركة متعددة الخطوات من خلال تسمية قيم الخصائص عند نقاط مختلفة على خط زمني، باستخدام from وto أو نسب مئوية مثل 0% و50% و100%.
وعلى خلاف الانتقالات، يمكن للإطارات الرئيسية وصف حركة معقدة متعددة المراحل تعمل تلقائياً دون تغيير في الحالة عند كل خطوة.
الصيغة المختصرة لـ animation
تطبّق مجموعة من الإطارات الرئيسية باستخدام الخاصية animation: animation: slideIn 400ms ease forwards. وهي تجمع الاسم والمدة ودالة التوقيت ووضع الملء.
يحافظ وضع الملء forwards على بقاء العنصر عند قيم إطاره الرئيسي الأخير بعد انتهاء الحركة، ويمنع عودته المفاجئة إلى حالة البداية.
تطبيق فئة animation عبر الحالة
في React، تضيف عادةً فئة تتضمن تعريف animation عندما تصبح الحالة مفعّلة. فعلى سبيل المثال، يبدأ إضافة is-entering تشغيل الإطارات الرئيسية لحظة تركيب العنصر أو تبدّل العلامة.
يحافظ ذلك على منطق الحركة داخل CSS، بينما يقرر React ببساطة متى يضيف الفئة.
animation-fill-mode
تتحكم الخاصية animation-fill-mode في الأنماط المطبقة قبل تشغيل الحركة وبعده. إذ يحتفظ forwards بالإطار الرئيسي الأخير، ويطبّق backwards الإطار الرئيسي الأول أثناء أي تأخير، بينما ينفذ both الأمرين معاً.
من دون forwards، سيعود العنصر الذي يتحرك إلى حالة الظهور بعد التلاشي إلى الاختفاء عند اكتمال الحركة.
animation-direction alternate
يشغّل animation-direction: alternate الحركة إلى الأمام ثم إلى الخلف في كل تكرار. وعند دمجه مع animation-iteration-count: infinite، ينشئ حركة سلسة ذهاباً وإياباً تشبه تأثير النبض أو التنفس.
ويفيد ذلك في مؤشرات التحميل أو الحركات الخفيفة التي تجذب الانتباه.
الإيقاف المؤقت باستخدام animation-play-state
يمكن أن تكون animation-play-state في حالة running أو paused. ويمكنكم التحكم فيها من خلال حالة React، مثل إيقاف شريط الأخبار المتحرك مؤقتًا عند تمرير المؤشر فوقه، وذلك بتبديل أحد الأصناف.
وبما أنها تتوقف مؤقتًا بدلًا من إعادة ضبطها، فإن الحركة تُستأنف من الموضع الذي توقفت عنده تمامًا.
إعادة التشغيل بتغيير الخاصية key
تعمل حركة الإطارات الرئيسية مرة واحدة فقط عند تطبيق صنفها للمرة الأولى؛ وإعادة إضافة الصنف نفسه لا تعيد تشغيلها. والحيلة الأنظف في React هي تغيير key للعنصر، بحيث يعيد React تركيب عقدة جديدة فتُعاد الحركة من بدايتها.
فعلى سبيل المثال، تؤدي إضافة key={count} إلى إشعار منبثق إلى إعادة تركيبه في كل مرة تزداد فيها قيمة count.
احترام تفضيل prefers-reduced-motion
يفعّل بعض المستخدمين تقليل الحركة في نظام التشغيل لأسباب تتعلق بالراحة أو سهولة الوصول. ضعوا الحركات غير الأساسية داخل @media (prefers-reduced-motion: reduce) وعطّلوها أو قصّروا مدتها هناك.
يؤدي احترام هذا التفضيل إلى جعل واجهتكم أكثر شمولًا، كما يتجنب التسبب في الشعور بعدم الارتياح.
تشغيل الحركة عند التمرير باستخدام IntersectionObserver
لتحريك العناصر عند دخولها إلى إطار العرض، استخدموا IntersectionObserver داخل useEffect. وعندما يصبح العنصر المرصود مرئيًا، تضبطون الحالة، مما يضيف صنف الحركة.
ينتج عن ذلك تأثيرات ظهور أثناء التمرير من دون تشغيل مستمعي تمرير مكثفين في كل إطار.
تنسيق الحركة باستخدام animation-delay
تتحكم animation-delay في توقيت بدء كل حركة من حركات الإطارات الرئيسية، مما يتيح ترتيب بداياتها. وعند إعطاء قائمة من العناصر تأخيرات متزايدة، تتحرك بالتتابع لتظهر بطريقة منسقة.
يمكنكم حساب التأخير لكل عنصر في React باستخدام style={{ animationDelay: i * 80 + 'ms' }}.
الإطارات الرئيسية مقابل الانتقالات
استخدموا الانتقالات للتغييرات البسيطة بين حالتين التي يسببها تفاعل المستخدم، واستخدموا الإطارات الرئيسية عندما تحتاجون إلى حركة متعددة الخطوات أو تكرارية، أو إلى حركة تعمل باستقلال عن تبديل الحالة.
كلاهما مكتوب بلغة CSS خالصة، لذلك يحدد React فقط وقت إضافة الأصناف، بينما يتولى المتصفح معالجة الإطارات.
اختبار سريع
اختبروا مدى فهمكم لسلوك الإطارات الرئيسية.
مراجعة
تعلّمتم تعريف @keyframes وتطبيقها باستخدام الصيغة المختصرة animation، والتحكم في وضع الملء والاتجاه، وإيقاف الحركات مؤقتًا وإعادة تشغيلها، وإظهار العناصر أثناء التمرير باستخدام IntersectionObserver.
كما تعرّفتم إلى كيفية احترام prefers-reduced-motion لتوفير حركة ملائمة لاحتياجات سهولة الوصول.
الأسئلة الشائعة
هل درس «رسوم CSS المتحركة بإطاراتها المفتاحية مع React» مجاني؟
نعم — نص درس «رسوم CSS المتحركة بإطاراتها المفتاحية مع React» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «رسوم CSS المتحركة بإطاراتها المفتاحية مع React»؟
طبّقوا رسوم @keyframes المتحركة وأزيلوها ديناميكيًا استنادًا إلى حالة المكوّن وأحداثه. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «رسوم CSS المتحركة بإطاراتها المفتاحية مع React»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- انتقالات CSS مع تغيّرات حالة React
- رسوم CSS المتحركة بإطاراتها المفتاحية مع React
- استخدام useLayoutEffect للقياسات قبل التحريك
- تحريكات الدخول والخروج دون مكتبة