Range Slider
<sf-range-slider> — шкала с одной или двумя ручками для приблизительной
настройки: цены, громкости, расстояния. Он собирает
слайдер диапазона из атрибутов. Когда
важно точное число, добавьте рядом поле ввода.
Пример
Применение
Пределы, шаг и значение
min и max задают пределы шкалы, по умолчанию 0 и 100. step — шаг; без
него значение меняется непрерывно. value — текущее значение; для двух ручек
это два числа через запятую. Значение вне пределов прижимается к ближайшему
пределу.
Две ручки
Два числа в value или атрибут multiple дают две ручки — нижнюю и верхнюю
границу. margin задаёт наименьшее расстояние между ними. У каждой ручки
своё доступное имя: lower-label и upper-label.
Подпись значения
label выбирает, как ручка показывает значение: none — без подписи, text
— постоянной подписью, tooltip — подсказкой. prefix и suffix добавляют
единицы. text-position и tooltip-position ставят подпись над (top) или
под (bottom) ручкой; label-position задаёт положение для обоих видов.
decimals меняет только видимое число знаков, без него точность берётся из
step.
Заполнение шкалы
connect задаёт заполненный отрезок: у одной ручки по умолчанию lower — от
минимума до ручки, upper — от ручки до максимума, для настроек вида «не
меньше». У двух ручек заполнен отрезок между ними; connect="false" убирает
заполнение.
Значение и событие change
Когда пользователь отпускает ручку, щёлкает по шкале или двигает ручку
клавишей, элемент отправляет всплывающее событие change. Его
event.detail:
| Поле | Содержимое |
|---|---|
value |
число; у двух ручек — массив из двух чисел |
values |
массив значений всех ручек |
handleCount |
число ручек: 1 или 2 |
handle |
номер ручки, которую двигали, с нуля |
Значение, заданное из кода, событием change не считается. Во время
перетаскивания значение меняется непрерывно; onUpdateValue(handler)
вызывает обработчик на каждом шаге с текущим значением первым аргументом.
Значение из кода и в форме
Свойство value возвращает текущее значение строкой, у двух ручек — через
запятую; присваивание или setValue() принимает строку, число или массив.
Атрибут value следует за ручками. setDisabled() выключает слайдер.
Своего поля формы у слайдера нет, поэтому в FormData значение не попадает:
перенесите его в скрытое поле или в запрос в обработчике change.
const price = document.querySelector('sf-range-slider');
const hidden = document.querySelector('input[name="price"]');
price.addEventListener('change', (event) => {
hidden.value = event.detail.values.join('-');
});
price.setValue([10000, 30000]);
Доступность
- Задайте доступное имя:
aria-labelилиaria-labelledbyна<sf-range-slider>переходит на ручку. Двум ручкам нужны отдельные имена вlower-labelиupper-label. - Каждая ручка — отдельная остановка
Tabс рольюslider; она сообщает текущее значение сprefixиsuffixи допустимые пределы с учётом второй ручки. - Стрелки двигают ручку на шаг,
HomeиEnd— к крайним значениям, которые ей доступны.keyboard="false"отключает управление с клавиатуры — оставляйте его включённым, если у значения нет другого способа ввода. - При письме справа налево минимум стоит справа.
Справочник API
Раздел собран из манифеста компонента выпуска ui-106d5901f8c3 и обновляется вместе с выпуском. Чтобы исправить описание, исправьте манифест.
Каждому атрибуту соответствует свойство элемента с тем же именем в camelCase: search-placeholder — searchPlaceholder. Свойство атрибута template называется templateName.
| Тег | <sf-range-slider> |
| Назначение | Слайдер для одного числа или диапазона из двух на дорожке: перетаскивание, щелчок или клавиши сдвигают ручку на step, заливка показывает выбранную часть, а значение можно показать текстом или подсказкой у каждой ручки. |
| Контракт | smart.range-slider, версия 1.0.0 |
| Поставка | выпуск Framework ui-106d5901f8c3 |
| Жизненный цикл | экспериментальный: API может меняться между выпусками |
| Готовность | описан: манифест и сценарий есть, продуктовой приёмки нет |
| Заготовка до прихода кода | сервер пишет data-sf-skeleton="block"; своего скелетона при загрузке данных нет (Заготовка до прихода кода) |
Атрибуты
template—string, по умолчаниюdefault.min—string, по умолчанию0.max—string, по умолчанию100.start—string, по умолчанию пусто.value—string, по умолчанию пусто.multiple—boolean, по умолчаниюfalse.step—string, по умолчанию пусто.margin—string, по умолчанию пусто.connect—string, по умолчанию пусто.keyboard—boolean, по умолчаниюtrue.label—string, по умолчаниюnone, значения:none,text,tooltip. Как каждая ручка показывает своё значение: никак, текстом рядом с ней или подсказкой.prefix—string, по умолчанию пусто.suffix—string, по умолчанию пусто.lower-label—string, по умолчанию пусто.upper-label—string, по умолчанию пусто.decimals—string, по умолчанию пусто.tooltip-position—string, по умолчанию пусто.text-position—string, по умолчанию пусто.label-position—string, по умолчанию пусто.disabled—boolean, по умолчаниюfalse.root-class—string, по умолчанию пусто.
Методы
getSliderRoot()— возвращаетobject|null. Возвращает внутренний корень слайдера (.sf-range-slider) или null до отрисовки.getValue()— возвращаетnumber|array|null. Возвращает текущее значение слайдера: число при одной ручке, массив из двух чисел при двух; null до создания слайдера.setValue(nextValue: number|string|array)— возвращаетobject. Устанавливает значение из кода (число, строка через запятую или массив). Число ручек следует за значением, если multiple не задан явно; значение, допустимое с учётом range, step и margin, отражается в атрибуте value. Не отправляет change.setDisabled(nextValue?: boolean)— возвращаетobject. Устанавливает или удаляет атрибут disabled и перерисовывает.setState(nextState: object)— возвращаетobject. Применяет ключи: value — через setValue, multiple явно задаёт число ручек, disabled — через setDisabled; любой другой ключ записывается как атрибут в kebab-case (false, null, undefined или пустое значение удаляет его, true устанавливает пустым).onUpdateValue(handler: function, options?: object|boolean)— возвращаетobject. Добавляет обработчик sf-range-slider-update; обработчик вызывается с (value, detail, event). Обработчик, не являющийся функцией, игнорируется.onSliderUpdate(handler: function, options?: object|boolean)— возвращаетobject. То же, что onUpdateValue.onChange(handler: function, options?: object)— Подписывается на change — зафиксированное значение: handler(value, detail, event). Возвращает элемент.onSliderChange(handler: function, options?: object|boolean)— возвращаетobject. То же, что onChange: подписывается на change — каноническое имя.onSet(handler: function, options?: object|boolean)— возвращаетobject. Добавляет обработчик sf-range-slider-set; обработчик вызывается с (value, detail, event). Обработчик, не являющийся функцией, игнорируется.onSliderSet(handler: function, options?: object|boolean)— возвращаетobject. То же, что onSet.onStart(handler: function, options?: object|boolean)— возвращаетobject. Добавляет обработчик sf-range-slider-start; обработчик вызывается с (value, detail, event). Обработчик, не являющийся функцией, игнорируется.onSliderStart(handler: function, options?: object|boolean)— возвращаетobject. То же, что onStart.onEnd(handler: function, options?: object|boolean)— возвращаетobject. Добавляет обработчик sf-range-slider-end; обработчик вызывается с (value, detail, event). Обработчик, не являющийся функцией, игнорируется.onSliderEnd(handler: function, options?: object|boolean)— возвращаетobject. То же, что onEnd.
События
Все события приходят на сам элемент и всплывают. Общие события базового элемента перечислены в главе Жизненный цикл → Этапы.
change—detail:{ component: object, values: array, value: number|array, handleCount: number, handle: number }. Пользователь зафиксировал значение (конец перетаскивания, щелчок, клавиша); всплывает от корня слайдера сvalues,value,handleCountиhandle. Значение, установленное из кода, не является изменением. Имя для привязки.sf-range-slider-change— устаревший псевдоним событияchange: приходит с тем жеdetail, подписывайтесь наchange.onSliderChange— устаревший псевдоним событияchange: приходит с тем жеdetail, подписывайтесь наchange.
Доступность
- Роль: slider.
- Доступное имя: обязательно.
- Клавиши:
Tab,ArrowLeft,ArrowRight,ArrowUp,ArrowDown,Home,End. - Фокус: aria-label или aria-labelledby на хост-элементе передаётся каждой ручке; при двух ручках lower-label и upper-label называют каждую. Каждая ручка — остановка Tab с видимым кольцом фокуса. Стрелки сдвигают на step (зеркально в RTL), Home и End переводят к границам ручки; keyboard=false отключает клавиши.
Минимальная разметка
<sf-range-slider aria-label="Price" min="0" max="100" value="20"></sf-range-slider>
Источник
simai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/smart/range-slidersimai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/rule/rule.json#name=cl-range-slider