Judesys React DOM · React Native Animated API

Parašykite judesį kartą. Jis veikia sklandžiai ir niekada nesugenda.

Animated perkelia React Native Animated į žiniatinklį. Viena reikšmė valdo bet kiek elementų be React perpiešimo kiekviename kadre, palaikomą judesį groja pati naršyklė, o kiekvienas pertraukimas tęsiasi nuo to, kas yra ekrane.

Diegimas
npm install @kkwaenggwari/animated

Viena laikrodžio reikšmė valdo visų 64 figūrų bangas. Judinkite žymeklį virš scenos.

Išmatuota šiame leidime

Išmatuota su 1.0.0 versija Chrome be sąsajos staliniame PC. Skaičiai priklauso nuo įrenginio. Kaip matavome

  • 0.00msJavaScript per kadrą, kol juda 400 elementų

    Baigtinį transform ir opacity judesį Animated elementuose groja naršyklė. Paties puslapio kadrų callback neatlieka jokio darbo.

  • 0.13msJavaScript per kadrą, kai viena reikšmė valdo 10 000 elementų

    Reikšmė įrašo vieną CSS kintamąjį; kiekvienas elementas CSS iš jo išveda savo stilių.

  • 0React perpiešimai judesio metu

    Reikšmės niekada nepereina per React būseną. Komponentai perpiešiami, kai pasikeičia jūsų props, o ne kai pasikeičia kadras.

01 · Paprasta

Jau žinomas API, paprastame React style

timing, spring, interpolate, loop ir Animated.event išlaiko React Native pavadinimus ir konfigūracijas. Reikšmė patenka tiesiai į paprastą style prop, todėl prieš pirmąjį judesį nereikia mokytis jokio specialaus komponento.

  • Perkelkite React Native kodą pervadindami Animated.View į Animated.div.
  • Viena reikšmė gali vienu metu judinti juostelę, ciferblatą ir kortelių eilę, kiekvieną savo diapazone.
  • useAnimated valdo receptą: pradeda prijungiant, pradeda iš naujo pasikeitus priklausomybei ir sutvarko atjungiant.

Ruošiamas pavyzdys…

Tie patys kvietimai kaip 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 · Greita

Jokio React perpiešimo kiekviename kadre

hook reikšmė yra CSS kintamasis. Tiesinės interpoliacijos ir aritmetika tampa tiksliomis to kintamojo calc() išraiškomis, todėl kiekvienas kadras yra vienas įrašymas, o likusius skaičiavimus atlieka naršyklė. Baigtinį transform ir opacity judesį Animated.<tag> elementuose naršyklė groja be kadrų callback.

  • Pakeiskite taškų skaičių: skaitiklis rodo, kad React perpiešė vieną kartą per pakeitimą, niekada per kadrą.
  • scope įrašo reikšmę vieną kartą į konteinerį, o ne į kiekvieną elementą.
  • inspect(element) pasako, kokį kelią naudoja kiekviena savybė ir kodėl.

Ruošiamas pavyzdys…

03 · Stabilu

Pertraukite bet kur. Jis tęsia.

Naujas tikslas prasideda ten, kur elementas yra ekrane, o spyruoklė išlaiko ir greitį, todėl apsisukimas pusiaukelėje sklandžiai išlinksta, užuot pirmiausia sustojęs. hook aprašyti valdikliai sustabdomi ir atlaisvinami pakeičiant ir atjungiant, o serveryje atvaizduotas markup po hidratacijos toliau animuojamas.

  • Spustelėkite du kartus greitai: su spring trajektorija išlinksta, su timing padėtis išlieka, bet prasideda nauja kreivė.
  • Sustabdymas palieka reikšmę ten, kur ji yra; niekas nepašoka į galutinę būseną.
  • Jokių pamirštų kadrų ciklų po atjungimo, maršruto pakeitimo ar paslėpto skirtuko.

Ruošiamas pavyzdys…

Sukurta su Animated

Reikia paruošto komponento? Animated Chorus.

Besisukantys skaičiai, keliaujantys kortelių paryškinimai, eiga, sheet ir animuoti sąrašai, kurie tiesiai įsiterpia į React ir React Native. Šie trys veikia būtent dabar šiame puslapyje.

Apsilankykite Animated Chorus

Pradėkite per tris minutes

Įdiekite paketą, pajudinkite pirmąją reikšmę, tada pasirinkite vadovą jūsų laukiančiai užduočiai.

npm install @kkwaenggwari/animated

Paieška

Rašykite, kad ieškotumėte dokumentacijoje.