الأدلة · 03

مكوّنات Animated

اعرض عناصر عادية تتحرك نحو وجهة، وتستجيب للإيماءات، وتغادر بأناقة.

Animated.<tag>

تعرض Animated.div وAnimated.button وAnimated.svg وكل وسم HTML أو SVG آخر العنصر العادي من دون غلاف. يقبل style الخاص بها القيم، ويمكن أن تكون التحويلات مصفوفات كما في React Native.

الحركة المحدودة لـ transform وopacity على هذه العناصر، بما فيها النوابض، مؤهلة للتشغيل في المتصفح.

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

seed وpose وposes وtempo

seed هو الإطار الأول، وpose الوجهة الحالية (كائن أو اسم مدخل في poses)، وtempo توقيت أو نابض. تغيير tempo وحده لا يعيد تشغيل وجهة لم تتغيّر.

يُطلَق onRest حين يصل العنصر.

Card.jsx
<Animated.article
  seed={{ opacity: 0, transform: [{ translateY: 16 }] }}
  pose={selected ? 'raised' : 'rest'}
  poses={{
    rest: { opacity: 1, transform: [{ translateY: 0 }, { scale: 1 }] },
    raised: { opacity: 1, transform: [{ translateY: -8 }, { scale: 1.04 }] },
  }}
  tempo={{ spring: { stiffness: 300, damping: 26 } }}
  onRest={() => console.log('arrived')}
/>;

الاستجابة للإيماءات

يربط respond الإيماءات بوجهات مؤقتة: hover وfocus وfocusWithin وpress وlongPress وdrag وinView وغيرها. حين تنتهي الاستجابة، يعود العنصر إلى وضعيته من حيث هو.

يُبلغ onResponse عن بداية كل استجابة ونهايتها، ويراقب respond={{ press: {} }} إيماءة من دون تغيير أي شيء بصريًا.

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

مشاركة الإعدادات الافتراضية عبر Animated.Scope

يمرّر Animated.Scope اسم وضعية وإيقاعًا وإعدادات حركة افتراضية إلى عناصر Animated داخله.

Menu.jsx
<Animated.Scope tempo={{ spring: { stiffness: 380, damping: 30 } }}>
  <Animated.li pose={{ opacity: 1 }} />
  <Animated.li pose={{ opacity: 1 }} />
</Animated.Scope>;

مكوّناتك الخاصة

يجعل Animated.wrap(Component) — وهو createAnimatedComponent في React Native — مكوّنًا يمرّر ref ويُحَلّ إلى عنصر DOM واحد يقبل props نفسها.

Link.jsx
import { forwardRef } from 'react';
import { Animated } from '@kkwaenggwari/animated';

const Link = forwardRef((props, ref) => <a ref={ref} {...props} />);
const AnimatedLink = Animated.wrap(Link);

<AnimatedLink href="/pricing" respond={{ hover: { transform: [{ translateX: 4 }] } }} />;

بحث

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