React · React Native · 16 компонентов
Сложные взаимодействия — уже готовы.
Animated Chorus — набор компонентов анимации для взаимодействий, которые трудно сделать правильно вручную: прокручивающиеся числа, потоковый текст, смены с изменением размера, шторки, пейджеры, действия по свайпу и списки, которые анимируют только изменившееся. Один тег и ваши данные. Без provider и без настройки.
npm install @kkwaenggwari/animated-chorusИзмерено на этой сборке
Chrome, 2026-09-28. Все условия и замеры — в руководстве по производительности. Как измеряли
- 28.0KBKB gzip за все 16 экспортов
Вся веб-точка входа, минифицированная. Единственная peer-зависимость — React.
- 0Колбэков кадров JS во время анимации
Число, высота и подсветка меняются вместе: браузер воспроизводит все 12 анимации.
- 1Коммит React на изменение значения
MotionNumberперерисовывается, когда меняется значение, и никогда — пока оно прокручивается. - 11Коммитов React на 3000 потоковых символов
MotionStreamдобавляет символы напрямую и передаёт их в React несколько раз в секунду.
01Проще всего
Один тег и ваши данные
Каждый компонент работает сам по себе: без provider, компонента-обёртки и вызова настройки. Коллекции принимают items и renderItem, а раскладка, тексты и стили остаются вашими.
- Импортируйте компонент и передайте значение. Это вся интеграция.
- Списки, вкладки и пейджеры читают ваш массив; ключи по умолчанию —
item.id. - Текст остаётся настоящим текстом: переносится, масштабируется вместе со шрифтом и выделяется.
<MotionNumber value={total} />;<MotionSwap value={status}>{label}</MotionSwap>;<MotionHeight open={open}>{details}</MotionHeight>;<MotionHighlight items={tabs} value={tab} onValueChange={setTab} />;<MotionList items={tasks} renderItem={(task) => task.title} />;<ProgressRing value={progress} />;
Шесть живых компонентов и одна строка кода за каждым.
Подготовка примера…
02Быстрее всего
Воспроизводит браузер. React стоит на месте.
В вебе не нужно загружать библиотеку анимации: компоненты передают движение Web Animations API, поэтому прокручивающееся число или меняющая размер панель не стоят ни JavaScript на кадр, ни рендера React, пока движутся.
- 0 колбэков кадров JS, пока одновременно идут 12 анимации.
- Один коммит React на изменение значения, а не на каждый кадр.
- Потоковый текст: 11 коммитов React на 3000 символов. Пример ниже считает собственные рендеры.
Подготовка примера…
03Надёжнее всего
Прерывайте что угодно. Ничто не прыгает.
Каждое новое значение начинается с того, что на экране, а пружины сохраняют скорость, поэтому быстрые нажатия, всплески данных и развороты выглядят намеренными. Когда движение заканчивается, ничего не остаётся запущенным.
- Числа никогда не разваливаются: оставшиеся разряды сдвигаются, пока прокручиваются.
- 200 новых значений с интервалом 5 мс: после них осталось анимаций — 0, и итоговый текст точен.
- Безопасно в React StrictMode. В фоновом приложении React Native движение сразу приходит в конечное состояние.
Подготовка примера…
16 компонентов, сгруппированных по задачам
Числа и текст, содержимое с меняющимся размером, выбор, списки, жесты, оверлеи и прогресс. У каждого есть живой стенд с props сбоку.
Все компонентыЧисла и текст
Содержимое и размер
Выбор и страницы
Списки
Жесты
Оверлеи
Прогресс
Вместе
Готовые экраны из нескольких компонентов, у каждого настройки вынесены за пределы примера.
Все примеры- Ответ в чатеПодсказки, которые сворачиваются, ответ, приходящий потоком в ровном темпе, и сменяющаяся строка статуса.
MotionStreamMotionListMotionSwapMotionHeight - Итог заказаКоличества, суммы по строкам и итог прокручиваются при изменении корзины; уведомление о купоне появляется и уходит; оплата требует осознанного удержания.
MotionListMotionNumberMotionPresenceMotionHold - ВходящиеВкладки-фильтры с живыми счётчиками, строки, которые можно смахнуть, и список, закрывающий промежуток.
MotionHighlightMotionListMotionSwipeMotionNumber - ФотолентаЛистайте фотографии, переходите по миниатюрам, открывайте любое фото на весь экран и вытягивайте его подробности.
MotionPagerMotionHighlightMotionZoomMotionSheet
Один импорт в вебе и React Native
Metro выбирает нативную реализацию, а веб-сборщики — реализацию для DOM. Каждая платформа воспроизводит движение так, как у неё получается лучше всего.
// Web and React Native: the same import.
import { MotionNumber, MotionList } from '@kkwaenggwari/animated-chorus';
export function Score({ points, players }) {
return (
<>
<MotionNumber value={points} />
<MotionList items={players} renderItem={(player) => player.name} />
</>
);
}| Часть | Веб | React Native |
|---|---|---|
| Transform и opacity | Web Animations API, пружины рассчитываются аналитически | Animated с нативным драйвером |
| Ширина и высота | Web Animations API | Animated с драйвером JS, потому что это раскладка |
| Потоковый текст | Символы добавляются и плавно появляются; несколько рендеров React в секунду | Настоящий Text, появляется без затухания |
| Шторки и увеличение | Нативный dialog в верхнем слое | Прозрачный Modal; закрывается кнопкой «Назад» |
Начните за две минуты
Установите, импортируйте компонент, передайте значение.
npm install @kkwaenggwari/animated-chorus