v-range-slider — компонент библиотеки Vuetify,
предназначенный для выбора диапазона значений между
двумя границами. В отличие от обычного v-slider, который
управляет одним значением, диапазонный слайдер содержит два
ползунка, определяющих минимальное и максимальное значение.
Компонент широко используется для:
Диапазонный слайдер представляет собой визуальную шкалу, по которой перемещаются два маркера. Область между ними обычно выделяется цветом, что делает интерфейс интуитивным.
Минимальная реализация v-range-slider требует только
связывания значения через v-model.
<template>
<v-range-slider
v-model="range"
></v-range-slider>
</template>
<script>
export default {
data() {
return {
range: [20, 80]
}
}
}
</script>
v-model принимает массив из двух
чиселПример состояния:
[20, 80]
Это означает, что выбран диапазон от 20 до 80.
Для определения границ шкалы используются свойства:
| Свойство | Описание |
|---|---|
min |
минимальное значение |
max |
максимальное значение |
Пример:
<v-range-slider
v-model="range"
:min="0"
:max="100"
></v-range-slider>
range: [25, 75]
Ползунки не смогут выйти за пределы диапазона 0–100.
Свойство step определяет шаг перемещения
ползунков.
<v-range-slider
v-model="range"
:min="0"
:max="100"
:step="5"
></v-range-slider>
Теперь возможные значения:
0, 5, 10, 15, 20 ...
Это удобно для:
Значения диапазона можно выводить с помощью слотов или дополнительных компонентов.
Пример отображения:
<template>
<div>
<v-range-slider
v-model="range"
:min="0"
:max="100"
></v-range-slider>
<div>
Минимум: {{ range[0] }}
Максимум: {{ range[1] }}
</div>
</div>
</template>
При перемещении ползунков значения обновляются реактивно.
thumb-label)Свойство thumb-label включает подсказки на
ползунках.
<v-range-slider
v-model="range"
thumb-label
></v-range-slider>
Теперь при перемещении отображается текущее значение.
<v-range-slider
v-model="range"
thumb-label="always"
></v-range-slider>
Значения будут отображаться постоянно.
ticks)Для визуализации делений используется свойство
ticks.
<v-range-slider
v-model="range"
:min="0"
:max="10"
ticks
></v-range-slider>
Отображаются отметки вдоль всей шкалы.
<v-range-slider
v-model="range"
:min="0"
:max="10"
:step="1"
show-ticks
></v-range-slider>
Это повышает точность выбора значений.
tick-labels)Для каждой отметки можно задать текст.
<v-range-slider
v-model="range"
:min="0"
:max="4"
:tick-labels="['0', '25', '50', '75', '100']"
></v-range-slider>
Теперь каждая отметка имеет подпись.
Цвет активного диапазона можно изменить через color.
<v-range-slider
v-model="range"
color="green"
></v-range-slider>
Также доступны:
| Свойство | Назначение |
|---|---|
color |
активный диапазон |
track-color |
цвет неактивной шкалы |
thumb-color |
цвет ползунков |
Пример:
<v-range-slider
v-model="range"
color="blue"
track-color="grey"
thumb-color="red"
></v-range-slider>
Для блокировки взаимодействия используется disabled.
<v-range-slider
v-model="range"
disabled
></v-range-slider>
Слайдер становится неактивным.
Компонент может отображаться вертикально.
<v-range-slider
v-model="range"
vertical
></v-range-slider>
Часто используется в:
Иногда требуется запретить слишком узкий диапазон.
Для этого используется min-range.
<v-range-slider
v-model="range"
:min="0"
:max="100"
:min-range="10"
></v-range-slider>
Минимальная ширина диапазона — 10 единиц.
max-range)Также можно ограничить максимальный диапазон.
<v-range-slider
v-model="range"
:max-range="50"
></v-range-slider>
Пользователь не сможет выбрать диапазон больше 50.
Основные события:
| Событие | Описание |
|---|---|
update:modelValue |
изменение диапазона |
change |
окончательное изменение |
start |
начало перемещения |
end |
завершение перемещения |
Пример:
<v-range-slider
v-model="range"
@change="onChange"
></v-range-slider>
methods: {
onChange(value) {
console.log("Новый диапазон:", value)
}
}
v-range-slider часто применяется в интерфейсах
фильтрации.
Пример фильтра цены:
<template>
<div>
<v-range-slider
v-model="priceRange"
:min="0"
:max="1000"
:step="10"
thumb-label
></v-range-slider>
<div>
Цена: {{ priceRange[0] }} — {{ priceRange[1] }}
</div>
</div>
</template>
<script>
export default {
data() {
return {
priceRange: [100, 700]
}
}
}
</script>
С помощью слотов можно кастомизировать содержимое.
<v-range-slider v-model="range">
<template v-slot:thumb-label="{ value }">
{{ value }}%
</template>
</v-range-slider>
Теперь рядом с ползунками отображается процент.
computedИногда диапазон используется для фильтрации данных.
computed: {
filteredProducts() {
return this.products.filter(p =>
p.price >= this.range[0] &&
p.price <= this.range[1]
)
}
}
Диапазон управляет отображением элементов списка.
v-range-slider полностью интегрирован с реактивной
системой фреймворка Vue.js. Изменение диапазона мгновенно
отражается:
Компонент оптимизирован для частых обновлений и плавного взаимодействия.
100 — 500 $
18 — 65 лет
08:00 — 18:00
скорость 20 — 80
Диапазонные слайдеры обеспечивают:
По сравнению с двумя отдельными полями ввода:
| Подход | Удобство |
|---|---|
| Два input | медленнее |
| range-slider | быстрее |
step для контроля точности.min и
max.thumb-label.min-range для предотвращения слишком узких
диапазонов.v-modelНеверно:
range: 50
Правильно:
range: [20, 80]
range: [-10, 120]
Если min=0 и max=100, такие значения будут
автоматически ограничены.
При работе с денежными значениями без step может
возникнуть множество дробных чисел.
Рекомендуется:
step="10"
v-slider| Компонент | Назначение |
|---|---|
v-slider |
одно значение |
v-range-slider |
диапазон |
v-range-slider является расширением логики обычного
слайдера и используется там, где требуется интервал
значений, а не единичный параметр.