MotionNumber · MotionText
Число, разряды которого крутятся как колёсики, включая появляющиеся и исчезающие разряды.
ВебReact NativeЧисла и текст
Попробуйте
Подготовка примера…
Кратчайшее использование
<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
| Проп | Тип | По умолчанию | Описание |
|---|---|---|---|
value | number | bigint | string | —обязательно | Число или числовой текст, отформатированный вами. |
mode | 'replace' | 'roll' | 'replace' | replace сдвигает каждый изменившийся разряд на один шаг; roll проходит через промежуточные цифры. |
direction | 'auto' | 'digit' | 'up' | 'down' | 'auto' | auto следует за изменением величины, чтобы переносы крутились в одну сторону; digit сравнивает каждый разряд отдельно. |
stagger | number | 45 | Миллисекунды между изменившимися разрядами, от единиц наружу. Вся волна ограничена по времени. |
format | (value) => string | Intl.NumberFormatOptions | Функция, возвращающая текст для показа, или опции Intl.NumberFormat (вместе с intl). | |
intl | boolean | false | Использовать встроенный Intl.NumberFormat. По умолчанию выключено, чтобы ни одной среде выполнения не требовался Intl. |
locale | string | string[] | Локаль для intl. | |
prefix | string | Текст перед числом. | |
suffix | string | Текст после числа. | |
transition | Transition | spring | Кривая timing { duration, easing } или пружина { tempo: 'spring', spring }. При прерывании пружины сохраняют инерцию. |
onMotionComplete | (value) => void | Выполняется со значением, когда разряды остановились. |
MotionText
| Проп | Тип | По умолчанию | Описание |
|---|---|---|---|
children | ReactNode | Текст для показа. | |
as | element | 'span' | Элемент для рендера. |
transition | Transition | spring | Кривая timing { duration, easing } или пружина { tempo: 'spring', spring }. При прерывании пружины сохраняют инерцию. |
onMotionComplete | (text) => void | Выполняется, когда движение останавливается. |
Остальные props передаются отрендеренному элементу, поэтому className, style и обработчики событий работают как обычно.
Веб и React Native
В вебе каждый разряд — небольшая стопка глифов, которую воспроизводит Web Animations API, а текст остаётся выделяемым. MotionText анимирует любой текст: числовой прокручивается по разрядам, остальной сменяется.
В React Native число остаётся настоящим Text для раскладки, выделения и доступности, включая переносы и numberOfLines; глифы движутся на нативном драйвере.
Используется в примерах
- Итог заказаКоличества, суммы по строкам и итог прокручиваются при изменении корзины; уведомление о купоне появляется и уходит; оплата требует осознанного удержания.
MotionListMotionNumberMotionPresenceMotionHold - ВходящиеВкладки-фильтры с живыми счётчиками, строки, которые можно смахнуть, и список, закрывающий промежуток.
MotionHighlightMotionListMotionSwipeMotionNumber