Mișcare pentru React DOM · API-ul Animated din React Native

Scrieți mișcarea o dată. Rulează fluid și nu se strică niciodată.

Animated aduce Animated din React Native pe web. O singură valoare conduce oricâte elemente fără randare React la fiecare cadru, mișcarea suportată o redă chiar browserul, iar fiecare întrerupere continuă de la ce e pe ecran.

Instalare
npm install @kkwaenggwari/animated

O singură valoare de ceas conduce valurile tuturor celor 64 de forme. Mișcați cursorul peste scenă.

Măsurat pe această versiune

Măsurat cu build-ul 1.0.0 în Chrome headless pe un PC desktop. Cifrele depind de dispozitiv. Cum am măsurat

  • 0.00msJavaScript per cadru cât se mișcă 400 de elemente

    Mișcarea finită de transform și opacity pe elementele Animated o redă browserul. Callback-urile de cadru ale paginii nu fac nicio muncă.

  • 0.13msJavaScript per cadru când o valoare conduce 10.000 de elemente

    Valoarea scrie o singură variabilă CSS; fiecare element își derivă stilul din ea în CSS.

  • 0Randări React în timpul mișcării

    Valorile nu trec niciodată prin starea React. Componentele se randează când se schimbă props, nu când se schimbă cadrul.

01 · Simplu

API-ul pe care îl știți deja, pe style React obișnuit

timing, spring, interpolate, loop și Animated.event își păstrează numele și configurațiile din React Native. Valoarea intră direct în prop-ul obișnuit style, așa că nu trebuie învățată nicio componentă specială înainte de prima mișcare.

  • Aduceți codul din React Native redenumind Animated.View în Animated.div.
  • O singură valoare poate mișca simultan o bandă, un cadran și un rând de carduri, fiecare cu propriul interval.
  • useAnimated deține rețeta: pornește la montare, repornește când se schimbă o dependență și face curat la demontare.

Se pregătește exemplul…

Aceleași apeluri ca în React Native

Spinner.jsx
// React Native
<Animated.View style={{ transform: [{ rotate }] }} />

// React DOM with @kkwaenggwari/animated — the rest is identical
<Animated.div style={{ transform: [{ rotate }] }} />

const spin = useAnimatedValue(0);
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] });

Animated.loop(
  Animated.timing(spin, { toValue: 1, duration: 900, easing: Easing.linear, useNativeDriver: true }),
).start();

02 · Rapid

Fără randare React la fiecare cadru

Valoarea unui hook este o variabilă CSS. Interpolările liniare și aritmetica devin expresii calc() exacte ale acelei variabile, așa că fiecare cadru înseamnă o singură scriere, iar restul îl calculează browserul. Mișcarea finită de transform și opacity pe elementele Animated.<tag> o redă browserul fără callback-uri de cadru.

  • Schimbați numărul de puncte: contorul arată că React a randat o dată per schimbare, niciodată per cadru.
  • scope scrie valoarea o dată pe container în loc de pe fiecare element.
  • inspect(element) spune ce cale folosește fiecare proprietate și de ce.

Se pregătește exemplul…

03 · Stabil

Întrerupeți-l oriunde. Continuă.

O țintă nouă pornește de unde e elementul pe ecran, iar arcul păstrează și viteza, așa că o întoarcere la jumătatea drumului se curbează lin în loc să se oprească întâi. Controlerele declarate într-un hook se opresc și se eliberează la înlocuire și la demontare, iar markup-ul randat pe server continuă să se animeze după hidratare.

  • Dați clic de două ori repede: cu spring traiectoria se curbează, cu timing poziția se păstrează, dar pornește o curbă nouă.
  • Oprirea lasă valoarea unde este; nimic nu sare la starea finală.
  • Nicio buclă de cadre uitată după demontare, schimbarea rutei sau o filă ascunsă.

Se pregătește exemplul…

Construit cu Animated

Aveți nevoie de o componentă gata făcută? Animated Chorus.

Numere care se rotesc, evidențieri de carduri care se mută, progres, sheet-uri și liste animate care intră direct în React și React Native. Aceste trei rulează chiar acum pe pagină.

Vizitați Animated Chorus

Începeți în trei minute

Instalați pachetul, mișcați o primă valoare, apoi alegeți un ghid pentru sarcina de care aveți nevoie.

npm install @kkwaenggwari/animated

Căutare

Tastați pentru a căuta în documentație.