0Pricing
React Academy · درس

رسوم الإيماءات: التحويم والنقر والسحب

استخدم خصائص whileHover وwhileTap وdrag لتحريك المكوّنات استجابةً لإيماءات المستخدم.

رسوم الإيماءات: التحويم والنقر والسحب درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

نظرة عامة على خصائص الإيماءات

تحرّك خصائص إيماءات Framer Motion المكوّنات استجابةً لإدخال المستخدم دون معالجات أحداث JavaScript. وأهمها whileHover وwhileTap وwhileDrag وwhileFocus.

whileHover

تحدّد حالة التحريك أثناء تحويم المؤشر فوق العنصر. ويعود العنصر تلقائيًا إلى حالته السابقة عند مغادرة المؤشر.

<motion.button
  whileHover={{ scale: 1.05, boxShadow: '0 10px 30px rgba(0,0,0,0.15)' }}
  transition={{ type: 'spring', stiffness: 400, damping: 17 }}
>
  Hover me
</motion.button>

whileTap

تحدّد حالة التحريك أثناء الضغط على العنصر. وهي مثالية لتوفير ملاحظات مرئية عند الضغط على الأزرار.

<motion.button
  whileHover={{ scale: 1.05 }}
  whileTap={{ scale: 0.95 }}
>
  Click
</motion.button>

whileFocus

تحرّك العنصر عند حصوله على تركيز لوحة المفاتيح — وهي مناسبة لمؤشرات التركيز التي تراعي إمكانية الوصول.

<motion.input
  whileFocus={{ borderColor: '#4f46e5', boxShadow: '0 0 0 3px rgba(79,70,229,0.3)' }}
  transition={{ duration: 0.2 }}
/>

تمكين السحب

أضف الخاصية drag لجعل العنصر قابلًا للسحب. عيّنها إلى true أو 'x' أو 'y' لتقييد محور السحب.

<motion.div
  drag
  dragConstraints={{ left: -100, right: 100, top: -100, bottom: 100 }}
  whileDrag={{ scale: 1.1, cursor: 'grabbing' }}
  style={{ cursor: 'grab' }}
>
  Drag me
</motion.div>

استخدام dragConstraints مع Ref

قيّد السحب إلى عنصر حاوية باستخدام ref بدلًا من قيم البكسل — فلا يمكن للعنصر القابل للسحب مغادرة الحاوية.

const constraintsRef = useRef(null);

<div ref={constraintsRef} style={{ overflow: 'hidden', width: 300, height: 300 }}>
  <motion.div
    drag
    dragConstraints={constraintsRef}
    style={{ width: 80, height: 80, background: '#4f46e5' }}
  />
</div>

dragElastic

تتحكم dragElastic في مقدار تجاوز العنصر لحدود السحب (0 = دون مرونة، و1 = مرونة كاملة).

<motion.div
  drag
  dragConstraints={{ left: 0, right: 0, top: 0, bottom: 0 }}
  dragElastic={0.2} // slight rubber-band effect
/>

dragSnapToOrigin

يؤدي تعيين dragSnapToOrigin إلى عودة العنصر بنابض إلى موضعه الأصلي عند إفلاته.

<motion.div
  drag
  dragSnapToOrigin
  dragElastic={0.5}
  style={{ width: 60, height: 60, background: '#e11d48', borderRadius: '50%' }}
/>

أحداث التحريك

استخدم onPanStart وonPan وonPanEnd لتتبع موضع المؤشر أثناء إيماءات التحريك دون تمكين وضع السحب الكامل.

<motion.div
  onPan={(event, info) => {
    console.log('Point:', info.point.x, info.point.y);
    console.log('Delta:', info.delta.x, info.delta.y);
  }}
/>

أحداث السحب

استمع إلى أحداث دورة حياة السحب: onDragStart وonDrag وonDragEnd. ويحتوي كائن info على السرعة والإزاحة.

<motion.div
  drag="x"
  onDragEnd={(event, info) => {
    if (info.velocity.x > 500) onSwipeRight();
    if (info.velocity.x < -500) onSwipeLeft();
  }}
/>

نمط تمرير البطاقات

نفّذ تمريرًا للبطاقات بأسلوب Tinder باستخدام سرعة السحب لاكتشاف اتجاه التمرير عند الإفلات.

function SwipeCard({ onSwipe }) {
  return (
    <motion.div
      drag="x"
      dragConstraints={{ left: 0, right: 0 }}
      dragElastic={0.7}
      onDragEnd={(_, info) => {
        if (Math.abs(info.velocity.x) > 400) {
          onSwipe(info.velocity.x > 0 ? 'right' : 'left');
        }
      }}
    />
  );
}

تحقّق سريع

ما خاصية Framer Motion التي تجعل العنصر المسحوب يعود إلى موضعه الأصلي عند إفلاته؟

مراجعة

استخدم whileHover وwhileTap وwhileFocus لتحريكات الحالات التفاعلية. أضف drag للعناصر القابلة للسحب، وقيّدها باستخدام dragConstraints، واستخدم سرعة onDragEnd لاكتشاف عمليات التمرير.

الأسئلة الشائعة

هل درس «رسوم الإيماءات: التحويم والنقر والسحب» مجاني؟

نعم — نص درس «رسوم الإيماءات: التحويم والنقر والسحب» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «رسوم الإيماءات: التحويم والنقر والسحب»؟

استخدم خصائص whileHover وwhileTap وdrag لتحريك المكوّنات استجابةً لإيماءات المستخدم. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «رسوم الإيماءات: التحويم والنقر والسحب»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مكوّنات Motion والرسوم المتحركة الأساسية
  2. Variants للرسوم المتحركة المنسقة
  3. رسوم الإيماءات: التحويم والنقر والسحب
  4. رسوم التخطيط المتحركة وAnimatePresence
← العودة إلى React Academy