Все компоненты

MotionNumber · MotionText

Число, разряды которого крутятся как колёсики, включая появляющиеся и исчезающие разряды.

ВебReact NativeЧисла и текст

Попробуйте

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

Кратчайшее использование

Total.jsx
<MotionNumber value={count} />
<MotionNumber value={total} mode="roll" intl locale="en-US"
  format={{ style: 'currency', currency: 'USD' }} />
<MotionText>{status}</MotionText>

Что он берёт на себя

  • Переносы: 999 → 1,000 прокручивает каждый изменившийся разряд в одну сторону, как одометр.
  • Появляющиеся и исчезающие разряды въезжают и уезжают в своей колонке, а не возникают скачком.
  • Разделители, знаки и символы валют появляются и исчезают вместе со своим разрядом.
  • Оставшиеся разряды сдвигаются на новые места, пока прокручиваются, поэтому число никогда не разваливается.
  • Новое значение посреди движения продолжается ровно с того, что на экране.
  • Форматирование никогда не требует Intl: передайте текст или функцию format либо включите intl.

Для чего подходит

  • Сумма корзины, которая меняется по мере добавления товаров.
  • Живой счётчик или счёт.
  • Показатель на панели, который обновляется каждые несколько секунд.

Props

MotionNumber

ПропТипПо умолчаниюОписание
valuenumber | bigint | string—обязательноЧисло или числовой текст, отформатированный вами.
mode'replace' | 'roll''replace'replace сдвигает каждый изменившийся разряд на один шаг; roll проходит через промежуточные цифры.
direction'auto' | 'digit' | 'up' | 'down''auto'auto следует за изменением величины, чтобы переносы крутились в одну сторону; digit сравнивает каждый разряд отдельно.
staggernumber45Миллисекунды между изменившимися разрядами, от единиц наружу. Вся волна ограничена по времени.
format(value) => string | Intl.NumberFormatOptionsФункция, возвращающая текст для показа, или опции Intl.NumberFormat (вместе с intl).
intlbooleanfalseИспользовать встроенный Intl.NumberFormat. По умолчанию выключено, чтобы ни одной среде выполнения не требовался Intl.
localestring | string[]Локаль для intl.
prefixstringТекст перед числом.
suffixstringТекст после числа.
transitionTransitionspringКривая timing { duration, easing } или пружина { tempo: 'spring', spring }. При прерывании пружины сохраняют инерцию.
onMotionComplete(value) => voidВыполняется со значением, когда разряды остановились.

MotionText

ПропТипПо умолчаниюОписание
childrenReactNodeТекст для показа.
aselement'span'Элемент для рендера.
transitionTransitionspringКривая timing { duration, easing } или пружина { tempo: 'spring', spring }. При прерывании пружины сохраняют инерцию.
onMotionComplete(text) => voidВыполняется, когда движение останавливается.

Остальные props передаются отрендеренному элементу, поэтому className, style и обработчики событий работают как обычно.

Веб и React Native

В вебе каждый разряд — небольшая стопка глифов, которую воспроизводит Web Animations API, а текст остаётся выделяемым. MotionText анимирует любой текст: числовой прокручивается по разрядам, остальной сменяется.

В React Native число остаётся настоящим Text для раскладки, выделения и доступности, включая переносы и numberOfLines; глифы движутся на нативном драйвере.

Используется в примерах

Поиск

Начните вводить, чтобы искать в документации.