מדריכים · 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 הוא timing או קפיץ. שינוי של 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 ועוד. כשתגובה מסתיימת, האלמנט חוזר ל־pose שלו מכל מקום שבו הוא נמצא.

onResponse מדווח על תחילת כל תגובה ועל סופה, ו־respond={{ press: {} }} צופה במחווה בלי לשנות שום דבר חזותית.

מכין את הדוגמה…

לשתף ברירות מחדל עם Animated.Scope

Animated.Scope מעביר שם pose, tempo וברירות מחדל של אנימציה לאלמנטים של 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 }] } }} />;

חיפוש

הקלידו כדי לחפש בתיעוד.