Движение за 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

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 · Бързо

Без рендер на React на всеки кадър

Стойността на hook е CSS променлива. Линейните интерполации и аритметиката стават точни изрази calc() на тази променлива, така че всеки кадър е един запис, а останалото браузърът извежда сам. Крайното движение на transform и opacity при елементите Animated.<tag> се възпроизвежда от браузъра без callback-и за кадри.

  • Променете броя точки: броячът показва, че React е рендерирал веднъж на промяна, никога на кадър.
  • scope записва стойността веднъж в контейнер вместо във всеки елемент.
  • inspect(element) казва кой път използва всяко свойство и защо.

Подготовка на примера…

03 · Стабилно

Прекъснете го навсякъде. Продължава.

Нова цел започва от мястото на елемента на екрана, а пружината запазва и скоростта си, така че обръщането по средата завива плавно, вместо първо да спре. Контролерите, декларирани в hook, се спират и освобождават при замяна и демонтиране, а рендерираната на сървъра разметка продължава да се анимира след хидратация.

  • Кликнете два пъти бързо: със spring траекторията се извива, с timing позицията се запазва, но започва нова крива.
  • Спирането оставя стойността там, където е; нищо не скача до крайно състояние.
  • Никакви забравени цикли на кадри след демонтиране, смяна на маршрут или скрит раздел.

Подготовка на примера…

Изградено върху Animated

Нужен ви е готов компонент? Animated Chorus.

Превъртащи се числа, местещи се подчертавания на раздели, напредък, панели и анимирани списъци, които директно влизат в React и React Native. Тези три работят на тази страница точно сега.

Посетете Animated Chorus

Започнете за три минути

Инсталирайте пакета, раздвижете първата стойност и после изберете ръководство за задачата пред вас.

npm install @kkwaenggwari/animated

Търсене

Пишете, за да търсите в документацията.