Pohyb pro React DOM · API Animated z React Native
Napište pohyb jednou. Běží plynule a nikdy se nerozbije.
Animated přináší Animated z React Native na web. Jedna hodnota řídí libovolný počet prvků bez renderu Reactu v každém snímku, podporovaný pohyb přehrává sám prohlížeč a každé přerušení pokračuje od toho, co je na obrazovce.
npm install @kkwaenggwari/animatedJediná hodnota hodin řídí vlnění všech 64 tvarů. Přejeďte ukazatelem nad scénou.
Změřeno na tomto vydání
Změřeno sestavením 1.0.0 v Chrome bez rozhraní na stolním PC. Čísla se liší podle zařízení. Jak jsme měřili
- 0.00msJavaScript na snímek, zatímco se pohybuje 400 prvků
Konečný pohyb transform a opacity na prvcích Animated přehrává prohlížeč. Vlastní callbacky snímků stránky nedělají žádnou práci.
- 0.13msJavaScript na snímek, když jedna hodnota řídí 10 000 prvků
Hodnota zapisuje jednu proměnnou CSS; každý prvek si z ní v CSS odvodí svůj styl.
- 0Rendery Reactu během pohybu
Hodnoty nikdy neprocházejí stavem Reactu. Komponenty se renderují, když se změní vaše props, ne když se změní snímek.
01 · Snadné
API, které už znáte, na běžném style Reactu
timing, spring, interpolate, loop a Animated.event si zachovávají názvy a konfigurace z React Native. Hodnota jde přímo do běžné prop style, takže před prvním pohybem se nemusíte učit žádnou zvláštní komponentu.
- Převeďte kód z React Native přejmenováním
Animated.ViewnaAnimated.div. - Jedna hodnota může najednou hýbat pruhem, ciferníkem i řadou karet, každým v jeho vlastním rozsahu.
useAnimatedvlastní recept: spustí se při připojení, znovu se spustí při změně závislosti a při odpojení po sobě uklidí.
Příprava příkladu…
Stejná volání jako v React Native
// 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 · Rychlé
Žádný render Reactu v každém snímku
Hodnota hooku je proměnná CSS. Lineární interpolace a aritmetika se stávají přesnými výrazy calc() této proměnné, takže každý snímek je jeden zápis a zbytek odvodí prohlížeč. Konečný pohyb transform a opacity na prvcích Animated.<tag> přehrává prohlížeč bez callbacků snímků.
- Změňte počet teček: počítadlo ukazuje, že React renderoval jednou na změnu, nikdy na snímek.
scopezapíše hodnotu jednou na kontejner místo na každý prvek.inspect(element)řekne, kterou cestu každá vlastnost používá a proč.
Příprava příkladu…
03 · Stabilní
Přerušte ho kdekoli. Pokračuje.
Nový cíl začne tam, kde je prvek na obrazovce, a pružina navíc zachová svou rychlost, takže obrat v půli cesty plynule zatočí, místo aby se nejdřív zastavil. Controllery deklarované v hooku se při nahrazení a odpojení zastaví a uvolní a markup vyrenderovaný na serveru se po hydrataci dál animuje.
- Klikněte dvakrát rychle za sebou: se
springse dráha ohne, stimingse zachová poloha, ale začne nová křivka. - Zastavení nechá hodnotu tam, kde je; nic neskočí do koncového stavu.
- Žádné zapomenuté smyčky snímků po odpojení, změně routy nebo skrytí karty.
Příprava příkladu…
- Magnetický dokIkony se při průchodu ukazatele zvětšují, odsouvají sousedy a když ukazatel odejde, uklidní se.
moveInputfollowuseAnimatedCSSmultiply - Balíček karet k odsouváníTáhněte vrchní kartu. Za prahem odletí; jinak se pružně vrátí.
dragInputuseAnimatedListenerAnimated.div - Sdílená galerieDlaždice se rozroste do detailu a zase se zmenší zpět do mřížky.
Animated.SceneAnimated.Keepmove
Postaveno na Animated
Potřebujete hotovou komponentu? Animated Chorus.
Rolující čísla, putující zvýraznění karet, průběh, sheety a animované seznamy, které rovnou zapadnou do React i React Native. Tyto tři právě teď běží na této stránce.
Navštívit Animated ChorusZačněte za tři minuty
Nainstalujte balíček, pohněte první hodnotou a pak si vyberte průvodce pro úlohu před vámi.
npm install @kkwaenggwari/animated