Движение за React DOM · Animated API от React Native
Опишете движението веднъж. То е плавно и никога не се чупи.
Animated пренася Animated от React Native в уеб. Една стойност управлява произволен брой елементи без рендер на React на всеки кадър, поддържаното движение се възпроизвежда от самия браузър, а всяко прекъсване продължава от това, което е на екрана.
npm install @kkwaenggwari/animatedЕдна стойност на часовник управлява вълнението на всичките 64 форми. Движете показалеца над сцената.
Измерено на тази версия
Измерено с компилация 1.0.0 в headless Chrome на настолен PC. Числата зависят от устройството. Как измервахме
- 0.00msJavaScript на кадър, докато се движат 400 елемента
Крайното движение на transform и opacity при елементите на Animated се възпроизвежда от браузъра. Собствените callback-и за кадри на страницата не вършат работа.
- 0.13msJavaScript на кадър, когато една стойност управлява 10 000 елемента
Стойността записва една CSS променлива; всеки елемент извежда стила си от нея чрез CSS.
- 0Рендери на React по време на движение
Стойностите никога не минават през състоянието на React. Компонентите се рендерират, когато се променят вашите props, а не когато се смени кадърът.
01 · Лесно
Познатият API върху обикновения style на React
timing, spring, interpolate, loop и Animated.event запазват имената и конфигурациите от React Native. Стойността влиза директно в обикновен prop style, така че преди първото движение няма специален компонент за научаване.
- Пренесете код от React Native, като преименувате
Animated.ViewнаAnimated.div. - Една стойност може едновременно да движи лента, циферблат и ред карти, всяко със собствен диапазон.
useAnimatedпритежава рецептата: стартира при монтиране, рестартира при промяна на зависимост и почиства при демонтиране.
Подготовка на примера…
Същите извиквания като в 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 · Бързо
Без рендер на React на всеки кадър
Стойността на hook е CSS променлива. Линейните интерполации и аритметиката стават точни изрази calc() на тази променлива, така че всеки кадър е един запис, а останалото браузърът извежда сам. Крайното движение на transform и opacity при елементите Animated.<tag> се възпроизвежда от браузъра без callback-и за кадри.
- Променете броя точки: броячът показва, че React е рендерирал веднъж на промяна, никога на кадър.
scopeзаписва стойността веднъж в контейнер вместо във всеки елемент.inspect(element)казва кой път използва всяко свойство и защо.
Подготовка на примера…
03 · Стабилно
Прекъснете го навсякъде. Продължава.
Нова цел започва от мястото на елемента на екрана, а пружината запазва и скоростта си, така че обръщането по средата завива плавно, вместо първо да спре. Контролерите, декларирани в hook, се спират и освобождават при замяна и демонтиране, а рендерираната на сървъра разметка продължава да се анимира след хидратация.
- Кликнете два пъти бързо: със
springтраекторията се извива, сtimingпозицията се запазва, но започва нова крива. - Спирането оставя стойността там, където е; нищо не скача до крайно състояние.
- Никакви забравени цикли на кадри след демонтиране, смяна на маршрут или скрит раздел.
Подготовка на примера…
- Магнитна лентаИконите растат, когато показалецът минава, избутват съседите си и се успокояват, когато той се отдалечи.
moveInputfollowuseAnimatedCSSmultiply - Тесте за плъзганеПлъзнете горната карта. След прага тя отлита; иначе се връща с пружина.
dragInputuseAnimatedListenerAnimated.div - Споделена галерияПлочка се разгръща в подробен изглед и се свива обратно в мрежата.
Animated.SceneAnimated.Keepmove
Изградено върху Animated
Нужен ви е готов компонент? Animated Chorus.
Превъртащи се числа, местещи се подчертавания на раздели, напредък, панели и анимирани списъци, които директно влизат в React и React Native. Тези три работят на тази страница точно сега.
Посетете Animated ChorusЗапочнете за три минути
Инсталирайте пакета, раздвижете първата стойност и после изберете ръководство за задачата пред вас.
npm install @kkwaenggwari/animated