كل المكوّنات

MotionSwap

محتوى يتبدّل بتلاشٍ متقاطع بينما يتبعه الحجم.

الويبReact Nativeالمحتوى والحجم

جرّبه

جارٍ تجهيز المثال…

أقصر استخدام

SaveButton.jsx
<button onClick={save}>
  <MotionSwap value={status} effect="up">
    {status === 'saving' ? 'Saving…' : status === 'saved' ? 'Saved' : 'Save'}
  </MotionSwap>
</button>;

ما يتولّاه عنك

  • يتغيّر حجم العنصر من حجمه على الشاشة إلى الحجم الطبيعي للمحتوى الجديد، فلا تقفز الأزرار أبدًا.
  • يتلاشى المحتوى القديم في مكانه بينما يظهر الجديد؛ ولا يُعاد ترتيب أيٍّ منهما أثناء التبديل.
  • العودة في منتصف التبديل تكمل مما على الشاشة بدل تكديس النسخ.
  • الأبناء النصية هي value الخاصة بها؛ ومرّر value لأي شيء آخر.

استخدمه لـ

  • حفظ، ثم جارٍ الحفظ…، ثم تم الحفظ.
  • هيكل تحميل يتحول إلى بطاقة ملف شخصي.
  • زر تشغيل يصبح إيقافًا مؤقتًا.

Props

Propالنوعالافتراضيالوصف
valueunknownهوية المحتوى؛ والقيمة الجديدة تبدّله. الأبناء النصية هي هويتها.
childrenReactNodeالمحتوى.
aselement'span'العنصر المراد عرضه.
inlinebooleanas === 'span'يتحجّم true حسب المحتوى (تسميات، أيقونات)؛ ويملأ false عرض الأب ويحرّك الارتفاع.
align'start' | 'center' | 'end''center'أين يقع المحتوى أثناء تغيّر الحجم.
effect'fade' | 'up' | 'down' | 'scale''fade'كيف يدخل المحتوى ويخرج: up يصعد، وdown يهبط، وscale يكبر.
transitionTransitionspringمنحنى توقيت { duration, easing } أو نابض { tempo: 'spring', spring }. تحتفظ النوابض بزخمها عند المقاطعة.
onMotionComplete(value) => voidيعمل حين تستقر الحركة.

تذهب props الأخرى إلى العنصر المعروض، فتعمل className وstyle ومعالجات الأحداث كالمعتاد.

الويب وReact Native

يحرّك inline (الافتراضي حين يُعرض كـ span) العرض والارتفاع؛ ويملأ inline={false} عرض الأب ويحرّك الارتفاع.

في React Native تقيس التبديلات المضمّنة المحتوى الجديد على سطر واحد؛ استخدم inline={false} للمحتوى الذي يلتف.

مستخدم في هذه الأمثلة

بحث

اكتب للبحث في التوثيق.