MotionHighlight
Вкладки, сегментированные переключатели или навигация из данных — с одной подсветкой, которая перемещается к выбранному.
ВебReact NativeВыбор и страницы
Попробуйте
Подготовка примера…
Кратчайшее использование
<MotionHighlight
items={['Overview', 'Activity', 'Settings']}
value={tab}
onValueChange={setTab}
hover
/>;Что он берёт на себя
- Одна подсветка перемещается и меняет размер между элементами; стилизуйте её через
highlightClassName. - Элементы берутся из
items, ключи — изgetKey, подписи — изrenderItem. hoverзаставляет её следовать за указателем и возвращаться к выбранному.- Элементы могут переноситься на несколько строк, и подсветка следует за ними.
- Загрузка шрифтов и изменения раскладки перемеряются автоматически.
Для чего подходит
- Вкладки страницы.
- Панель фильтров.
- Сегментированный переключатель в форме настроек.
Props
| Проп | Тип | По умолчанию | Описание |
|---|---|---|---|
items | readonly T[] | —обязательно | Ваш массив данных. |
value | key | null | —обязательно | Ключ подсвеченного элемента; null скрывает подсветку. |
onValueChange | (key, item) => void | Выполняется с ключом и элементом при нажатии на элемент. | |
getKey | (item) => string | number | item.id | Возвращает уникальный стабильный ключ элемента. По умолчанию — item.id, а для строк и чисел — сам элемент. |
renderItem | (item, { selected, index }) => ReactNode | item.label | Рисует элемент; получает, выбран ли он. |
hover | boolean | false | Следовать за указателем над элементами и возвращаться к value, когда он уходит (веб). |
itemAs | element | 'button' | Элемент для каждого пункта. |
itemClassName | string | Класс для элемента каждого пункта; itemStyle задаёт его встроенный стиль. | |
highlightClassName | string | Класс для подсветки; highlightStyle задаёт её встроенный стиль. | |
transition | Transition | spring | Кривая timing { duration, easing } или пружина { tempo: 'spring', spring }. При прерывании пружины сохраняют инерцию. |
Остальные props передаются отрендеренному элементу, поэтому className, style и обработчики событий работают как обычно.
Веб и React Native
Каждый элемент по умолчанию рендерится как button (itemAs это меняет); нажатие вызывает onValueChange(key, item).
В React Native элементы — это Pressable; позиция работает на нативном драйвере, а размер — на вложенном view, которым управляет JavaScript.
Используется в примерах
- ВходящиеВкладки-фильтры с живыми счётчиками, строки, которые можно смахнуть, и список, закрывающий промежуток.
MotionHighlightMotionListMotionSwipeMotionNumber - ФотолентаЛистайте фотографии, переходите по миниатюрам, открывайте любое фото на весь экран и вытягивайте его подробности.
MotionPagerMotionHighlightMotionZoomMotionSheet