Пропсы корня
| Проп | Тип | По умолчанию |
|---|---|---|
value | V | — |
Контролируемое значение: число для одного бегунка или массив с одним элементом на каждый SliderThumb по его index. | ||
defaultValue | V | — |
Начальное значение для неконтролируемого использования: число для одного бегунка или массив с одним элементом на каждый SliderThumb по его index. По умолчанию — середина диапазона, как у <input type="range">. | ||
onChangeValue | (value: NoInfer<V>) => void | — |
Вызывается при изменении бегунка с числом или массивом — в форме value или defaultValue. | ||
min | number | 0 |
Минимально допустимое значение. По умолчанию 0. | ||
max | number | 100 |
Максимально допустимое значение. По умолчанию 100. | ||
step | number | 'any' | 1 |
Шаг значений: число или 'any'. По умолчанию 1. | ||
minStepsBetweenThumbs | number | 0 |
Минимальное расстояние между соседними бегунками в шагах. По умолчанию 0. Не действует при step='any', где нет шага для отсчёта; чтобы сохранить зазор, используйте небольшой числовой шаг, например 0.01. | ||
orientation | SliderOrientation | 'horizontal' |
'horizontal' (по умолчанию) или 'vertical', который растёт снизу. | ||
size | SliderSize | 'md' |
| Визуальный размер слайдера. | ||
variant | SliderVariant | 'primary' |
| Вариант визуальной стилизации. | ||
disabled | boolean | — |
| Отключает все бегунки. | ||
name | string | — |
| Имя поля формы для бегунков, если бегунок не задаёт собственное. | ||
ref | Ref<HTMLDivElement> | — |
| Ref на корневой элемент. | ||
Также принимает все атрибуты <div>.
Дочерние части
SliderTrack: дорожка,div.SliderRange: заполненная часть дорожки,divвнутриSliderTrack.SliderThumb: один бегунок,divсdisplay: contents, объединяющий поле ввода и индикатор.index: его элемент вvalueкорня, по умолчанию0- задаёт переменные положения; CSS-переменные в его
styleдоходят до обеих частей
SliderThumbInput: нативный<input type="range">внутриSliderThumb. Все его пропсы (name,disabled,list,aria-*,onChange,ref…) уходят в поле ввода;min,max,stepиvalueприходят из корня.SliderThumbIndicator: визуальный бегунок внутриSliderThumb,divс любым содержимым. Онaria-hiddenи пропускает указатель к полю ввода.
SliderTrack
| Проп | Тип | По умолчанию |
|---|---|---|
ref | Ref<HTMLDivElement> | — |
| — | ||
Также принимает все атрибуты <div>.
SliderRange
| Проп | Тип | По умолчанию |
|---|---|---|
ref | Ref<HTMLDivElement> | — |
| — | ||
Также принимает все атрибуты <div>.
SliderThumb
| Проп | Тип | По умолчанию |
|---|---|---|
index | number | 0 |
Позиция бегунка среди бегунков Slider — его элемент в корневом value. По умолчанию 0. | ||
ref | Ref<HTMLDivElement> | — |
| Ref на элемент бегунка. | ||
Также принимает все атрибуты <div>.
SliderThumbInput
| Проп | Тип | По умолчанию |
|---|---|---|
ref | Ref<HTMLInputElement> | — |
Ref на нативный <input type="range">. | ||
Также принимает все атрибуты <input>.
SliderThumbIndicator
| Проп | Тип | По умолчанию |
|---|---|---|
ref | Ref<HTMLDivElement> | — |
| Ref на элемент индикатора. | ||
Также принимает все атрибуты <div>.
Хуки
Продвинутые хуки для собственных частей внутри Slider. Используйте их, только когда экспортируемых частей недостаточно.
useSliderContext
Состояние корня, доступное в любом месте внутри Slider:
| Поле | Тип | Примечания |
|---|---|---|
min | number | min корня. |
max | number | max корня. |
step | number | 'any' | step корня. |
gap | number | Минимальное расстояние между соседними бегунками: minStepsBetweenThumbs * step, 0 при step='any'. |
orientation | SliderOrientation | orientation корня. |
disabled | boolean | undefined | disabled корня. |
name | string | undefined | name корня. |
values | number[] | Текущие значения всех бегунков по index, приведённые к сетке шага и отсортированные; массив даже для одного бегунка. |
changeThumb(index, value) | (index: number, value: number) => void | Задаёт значение бегунка с индексом index, удерживая его между соседями; сообщает об изменении через onChangeValue. |
useSliderThumbContext
Окружающий SliderThumb:
| Поле | Тип | Примечания |
|---|---|---|
index | number | index бегунка. |
low | number | Наименьшее значение, которое может принять бегунок: предыдущий бегунок плюс gap или min. |
high | number | Наибольшее значение, которое может принять бегунок: следующий бегунок минус gap или max. |
Пузырёк со значением, который работает и без value на корне:
usesliderthumbcontext.tsx · 55 строк
import {
Slider,
SliderRange,
SliderThumb,
SliderThumbIndicator,
SliderThumbInput,
SliderTrack,
Text,
useSliderContext,
useSliderThumbContext,
} from '@vega-ui/react';
Типы
SliderPropsSliderTrackPropsSliderRangePropsSliderThumbPropsSliderThumbInputPropsSliderThumbIndicatorPropsSliderSizeSliderVariantSliderOrientation
Модель состояния
Slider владеет значениями своих бегунков. Форма значения следует value или defaultValue: число для одного бегунка, массив с одним элементом на каждый SliderThumb по его index — для нескольких. onChangeValue получает ту же форму.
- Неконтролируемый:
defaultValueзадаёт начальное значение; сброс формы бегунков восстанавливает его, в том числе для формы, связанной через атрибутform. БезvalueиdefaultValueу слайдера один бегунок посередине диапазона и он сообщает числа, как<input type="range">. - Контролируемый:
valueвместе сonChangeValue. Изменение, которое родитель не применил, откатывается, как у контролируемого поля ввода. - Каждый бегунок — контролируемое нативное поле: указатель, клавиатуру, фокус, формы и вспомогательные технологии обеспечивает браузер, а
onChangeна бегунке срабатывает при каждом изменении. - Значения вне сетки шага или за пределами
min/maxприводятся так же, как это делает<input type="range">, без вызоваonChangeValue. - Форма фиксируется первым значением: переключение между числом и массивом на лету не поддерживается.
controlled-brightness.tsx · 44 строки
import { useState } from 'react';
import {
Label,
Slider,
SliderRange,
SliderThumb,
SliderThumbIndicator,
SliderThumbInput,
SliderTrack,
Text,
} from '@vega-ui/react';
controlled-range.tsx · 56 строк
import { useState } from 'react';
import {
Fieldset,
FieldsetLegend,
Slider,
SliderRange,
SliderThumb,
SliderThumbIndicator,
SliderThumbInput,
SliderTrack,
Text,
} from '@vega-ui/react';Ограничения бегунков
- Каждое поле бегунка получает собственные нативные
minиmax: значения соседей с отступомminStepsBetweenThumbs * stepилиminиmaxкорня на краях. Браузер удерживает бегунок между ними при перетаскивании и нажатии клавиш, аaria-valuemin/aria-valuemaxобъявляют реальные пределы. - При
step='any'шаг считать не из чего, поэтомуminStepsBetweenThumbsне действует и бегунки могут сойтись; чтобы сохранить промежуток, используйте маленький числовой шаг, например0.01. - Значения, переданные не по порядку, сортируются и разводятся на
minStepsBetweenThumbsшагов без вызоваonChangeValue, чтобы бегунки, поля ввода и отправляемые значения совпадали.
Поведение
- Как и у
<input type="range">, шаги отсчитываются отmin, а значение остаётся междуminи последним шагом, который помещается вmax. - Поля ввода соседних бегунков обрезаются по середине между их значениями, поэтому клик по дорожке нативно двигает ближайший бегунок. Бегунки, стоящие друг на друге, делятся по центру: левая половина двигает нижний, правая — верхний.
- Отключённый бегунок сохраняет свою половину дорожки: клик по ней ничего не делает.
- На сенсорных экранах горизонтальный слайдер оставляет жесты браузеру, как
<input type="range">; вертикальный задаётtouch-action: pan-x pinch-zoom, поэтому вертикальный свайп двигает бегунок, а не прокручивает страницу. <datalist>, подключённый черезlist, нативно примагничивает указатель; его деления не видны — рисуйте свои.