логотип PurpleSchool
логотип PurpleSchool

Инструкция по установке и компонентам Vue slider

Автор

Олег Марков

Введение

Vue slider — это удобный и гибко настраиваемый компонент для Vue.js, который позволяет быстро добавить настраиваемый слайдер (ползунок) в ваш проект. Такие слайдеры часто используются для выбора числовых значений или диапазонов (например, для фильтрации товаров по цене). Компонент легко интегрируется, обладает хорошей документацией и богатым набором опций для кастомизации интерфейса. Здесь я покажу, как пошагово установить Vue slider, подключить его к проекту, рассмотреть основные компоненты, их пропсы, методы и события с примером использования для каждой важной части.

Создание интерактивных слайдеров — отличный способ улучшить визуальное восприятие контента на вашем сайте. Vue slider позволяет легко интегрировать такие компоненты, предоставляя пользователям удобный интерфейс навигации. Если вы хотите детальнее погрузиться в Vue.js, изучить основы, компоненты, свойства и события, реактивность, жизненный цикл, а также научиться работать с Vue Router и Pinia, приходите на наш большой курс Vue.js 3, Vue Router и Pinia. На курсе 173 уроков и 21 упражнение, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Установка Vue slider

Подключение через npm

Если вы используете Vue CLI или любой сборщик модулей, оптимальным будет подключение через npm или yarn. Самым популярным слайдером считается пакет vue-slider-component, который поддерживает Vue 2 и 3.

Выполните команду для установки через npm:

npm install vue-slider-component --save

Или через yarn:

yarn add vue-slider-component

Подключение через CDN

Если вам нужен быстрый прототип либо нет сборщика модулей, можно использовать CDN:

<script src="https://unpkg.com/vue@next"></script>
<script src="https://unpkg.com/vue-slider-component@latest/dist/vue-slider-component.umd.min.js"></script>
<link rel="stylesheet" href="https://unpkg.com/vue-slider-component/theme/default.css">

Такой подход удобен для примерами на CodePen или JSFiddle.

Импорт компонента

Теперь добавьте импорт и регистрацию компонента в своем файле.

Vue 2 (Options API): ```js import VueSlider from 'vue-slider-component' import 'vue-slider-component/theme/default.css'

export default { components: { VueSlider } } ```

Vue 3 (Composition API): ```js import { defineComponent } from 'vue' import VueSlider from 'vue-slider-component' import 'vue-slider-component/theme/default.css'

export default defineComponent({ components: { VueSlider } }) ```

Использование основного компонента

Теперь давайте разберем основной синтаксис вставки слайдера.

<template>
  <vue-slider v-model="value"></vue-slider>
</template>

<script>
export default {
  data() {
    return {
      value: 45 // начальное значение
    }
  }
}
</script>

Здесь мы привязываем значение слайдера к переменной value через v-model. Любое смещение ползунка будет менять значение этой переменной.


Основные пропсы Vue slider

Слайдер обладает широким списком опций. Давайте разберём самые важные:

Пропс min и max

Определяет минимальное и максимальное значение ползунка.

<vue-slider v-model="value" :min="0" :max="100"></vue-slider>

Пропс step

Шаг изменения значения.

<vue-slider v-model="value" :step="5"></vue-slider>

Теперь значение изменяется с шагом в 5.

Пропс dot-size и height

Позволяют настраивать размер ползунка (dot) и высоту полосы.

<vue-slider v-model="value" :dot-size="20" :height="8"></vue-slider>

Пропс disabled

Делает слайдер неактивным.

<vue-slider v-model="value" :disabled="true"></vue-slider>

Теперь слайдер не реагирует на действия пользователя.

Пропс marks (отметки на ползунке)

Можно добавить визуальные отметки для ориентира пользователя.

<vue-slider v-model="value" :marks="{0: 'Низко', 50: 'Средне', 100: 'Высоко'}"></vue-slider>

Отметки появятся под соответствующими значениями.

Пропс tooltip (всплывающая подсказка)

Показывает/прячет подсказку при наведении/перемещении.

  • show: всегда показывать
  • none: не показывать
  • hover: показывать при наведении (по умолчанию)
<vue-slider v-model="value" tooltip="show"></vue-slider>

Диапазонные значения и множественные ползунки

Слайдер отлично работает с диапазонами — это когда пользователь может выбрать не одну, а две границы (например, от какой суммы до какой).

<vue-slider v-model="range" :min="0" :max="100" :interval="true"></vue-slider>
data() {
  return {
    range: [20, 80]
  }
}

Если вы хотите реализовать два и более ползунка, достаточно передать массив значений в v-model.

Кастомизация внешнего вида

Vue slider позволяет настраивать внешний вид под дизайн проекта:

Тема оформления

По умолчанию компонент подключается с дефолтной темой, вы можете создать свой собственный стиль, изменяя параметры SCSS или CSS.

К примеру:

.vue-slider-dot {
  background: #007bff; /* Синий цвет ползунка */
}
.vue-slider-rail {
  background: #e9ecef; /* Цвет полосы */
}

Кастомные классы можно найти в документации по теме.

Использование слотов

Один из мощных инструментов — named slots, дающие полный контроль над рендерингом элементов:

<vue-slider v-model="value">
  <template #dot="{ value }">
    <div class="my-dot">{{ value }}</div>
  </template>
</vue-slider>

Теперь вы видите в ползунке не точку, а собственный шаблон.

Работа с событиями

Компонент генерирует ряд событий для контроля и обработки пользовательских действий.

  • drag-start: начало перемещения
  • drag-end: окончание перемещения
  • change: изменение значения (по завершению)
  • input: при любом изменении (аналог input)

Покажу пример обработки:

<vue-slider
  v-model="value"
  @drag-start="onStart"
  @change="onChange"
></vue-slider>
methods: {
  onStart(val) {
    // val - текущее значение
    console.log('Начало движения', val)
  },
  onChange(val) {
    console.log('Значение изменилось', val)
  }
}

Как видите, вы в любой момент можете отследить или модифицировать поведение слайдера, интегрируя его в более сложную бизнес-логику.

Валидация и обработка ошибок

В процессе разработки иногда нужно валидировать выбранное значение. Обычно проверки делают внутри родительского компонента, в котором хранится значение (v-model):

<vue-slider v-model="value"></vue-slider>
<span v-if="value < 20" class="error">Минимум 20</span>

Или наблюдайте за ползунком через watch:

watch: {
  value(newVal) {
    if (newVal < 10) {
      // Предотвращаем неправильные значения
      this.value = 10;
    }
  }
}

Так вы минимизируете ошибочные значения.

Расширенные настройки

Показать значения с помощью лейблов

Вы можете явно отобразить текущие значения, если tooltip выключен или нужен собственный способ:

<div>
  <vue-slider v-model="value"></vue-slider>
  <span>Текущее значение: {{ value }}</span>
</div>

Форматирование отображаемых значений

Иногда необходимо отображать форматированные значения, например, добавить знак валюты:

<vue-slider
  v-model="value"
  :formatter="value => value + ' ₽'"
></vue-slider>

Несколько независимых слайдеров

Можно размещать несколько ползунков на странице:

<div>
  <vue-slider v-model="volume"></vue-slider>
  <vue-slider v-model="brightness" :max="200"></vue-slider>
</div>

Вертикальный слайдер

Сделать слайдер вертикальным просто:

<vue-slider v-model="value" direction="vertical"></vue-slider>

Интеграция с формами

Один из частых сценариев — работа Vue slider внутри формы для отправки данных на сервер:

<template>
  <form @submit.prevent="submitForm">
    <vue-slider v-model="priceRange" :interval="true" :min="100" :max="5000"></vue-slider>
    <button type="submit">Применить</button>
  </form>
</template>

<script>
export default {
  data() {
    return { priceRange: [800, 3000] }
  },
  methods: {
    submitForm() {
      // Отправляется массив priceRange: [от, до]
      console.log('Выбранный диапазон:', this.priceRange)
    }
  }
}
</script>

Такой подход отлично подходит для фильтрации товаров, подбора параметров и т.д.

Адаптация и отзывчивый дизайн

Слайдер адаптивен по умолчанию. Для более сложной вёрстки (например, использование внутри flex-контейнера или грид-сетке) полезно указать ширину явно:

<vue-slider style="width: 70%"></vue-slider>

Или сделать ширину 100% для мобильных экранов:

.vue-slider {
  width: 100%;
  min-width: 200px;
}

Пользовательский опыт остается отличным даже на мобильных устройствах.

Ленивая инициализация и SSR

Для серверного рендеринга или динамической подгрузки компонентов слайдер работает без проблем. Можно только учесть момент, что стили предварительно должны быть загружены через <link> или импорт в css.

Если компонент инициализируется в <keep-alive> или по условию, используйте <client-only> для Nuxt.js.

Лучшие практики и советы по использованию

  • Для числа с большим количеством знаков используйте кастомный форматтер.
  • Для диапазонных фильтров всегда указывайте interval.
  • Используйте свой кастомный dot через slot для брендинга.
  • Используйте событие change для триггера тяжелых операций, а не input.
  • Не забывайте об accessibility: давайте aria-лейблы и подписи.

Понимание того, как эффективно устанавливать и использовать Vue slider, является важным навыком для любого разработчика. Изучение компонентов, работы с жизненным циклом, Vue Router и Pinia поможет вам создать более функциональные и удобные веб-приложения. В первых 3 модулях курса Vue.js 3, Vue Router и Pinia уже доступно бесплатное содержание — начните погружаться в мир Vue.js и слайдеров прямо сейчас.

Частозадаваемые технические вопросы по теме статьи и ответы на них

1. Как сбросить значение слайдера к начальному через кнопку?

<button @click="value = startValue">Сбросить</button>
<vue-slider v-model="value"></vue-slider>

Значение сбросится на startValue (любое дефолтное).


2. Можно ли сделать слайдер только с дискретными заданными значениями (например, только 10, 30, 50)?

Используйте проп marks и обработайте значения:

<vue-slider
  v-model="value"
  :marks="{10:'10', 30:'30', 50:'50'}"
  :step="null"
  :data="[10,30,50]"
></vue-slider>

3. Как реализовать асинхронное обновление минимального и максимального значений?

Можно привязать значения min/max к переменным и менять их:

<vue-slider v-model="val" :min="dynamicMin" :max="dynamicMax"></vue-slider>

Меняйте dynamicMin и dynamicMax после загрузки данных.


4. Почему не работает v-model внутри v-for?

Если создаёте массив слайдеров циклом, используйте уникальный ключ:

<vue-slider v-for="item in items" :key="item.id" v-model="item.value"></vue-slider>

Тогда значения не будут конфликтовать.


5. Как контролировать точность ограниченного количества знаков после запятой?

Используйте форматтер:

<vue-slider
  v-model="value"
  :formatter="val => val.toFixed(2) + ' м'"
></vue-slider>

Два знака после запятой обеспечены.

Стрелочка влевоРабота с таблицами во Vue через TanStackУправление пакетами Vue js с помощью npmСтрелочка вправо

Все гайды по Vue

Руководство по валидации форм во Vue.jsИнтеграция Tiptap для создания редакторов на VueРабота с таблицами во Vue через TanStackИнструкция по установке и компонентам Vue sliderУправление пакетами Vue js с помощью npmУправление пакетами и node modules в Vue проектахКак использовать meta для улучшения SEO на VueПолный гайд по компоненту messages во Vuejs5 правил использования Inertia с Vue и LaravelРабота с модулями и пакетами в VueИнструкция по работе с grid на VueGithub для Vue проектов - подробная инструкция по хранению и совместной работеНастройка ESLint для Vue проектов и поддержка качества кодаОбработка ошибок и отладка в Vue.jsИспользование Vue Devtools для отладки и мониторинга приложенийРабота с конфигурационными файлами и скриптами VueСоздание и настройка проектов Vue с помощью Vue CLI3 способа интеграции Chart.js с Vue для создания графиковРабота с Canvas во VueИнструкция по реализации календаря во VueРабота с Ant Design Vue для создания UI на Vue
Работа с обновлениями компонента и жизненным циклом updateОбзор и использование утилит Vue для удобной разработкиРазрешение конфликтов и ошибок с помощью Vue resolveИспользование query-параметров и их обработка в маршрутах VueЗагрузка и управление состоянием загрузки в VueИспользование библиотек Vue для расширения функционалаКак работать с экземплярами компонента Instance во VueРабота с JSON данными в приложениях VueПолучение данных и API-запросы во Vue.jsЭкспорт и импорт данных и компонентов в VueОбработка событий и их передача между компонентами VuejsГайд по defineEmits на Vue 3Понимание core функционала Vue и его применениеПонимание и применение Composition API в Vue 3Понимание и работа с компилятором VueКогда и как использовать $emit и call во VueВзаимодействие с внешними API через Axios в Vue
Веб приложения на Vue архитектура и лучшие практикиИспользование Vite для быстрого старта и сборки проектов на Vue 3Работа с URL и ссылками в приложениях на VueРабота с пользовательскими интерфейсами и UI библиотеками во VueОрганизация и структура исходных файлов в проектах VueИспользование Quasar Framework для разработки на Vue с готовыми UI-компонентамиОбзор популярных шаблонов и стартовых проектов на VueИнтеграция Vue с PHP для создания динамичных веб-приложенийКак организовать страницы и маршруты в проекте на VueNuxt JS и Vue 3 для SSR приложенийСоздание серверных приложений на Vue с помощью Nuxt jsИспользование Vue Native для разработки мобильных приложенийОрганизация и управление индексной страницей в проектах VueИспользование Docker для контейнеризации приложений на VueИнтеграция Vue.js с Django для создания полноценных веб-приложенийСоздание и работа с дистрибутивом build dist Vue приложенийРабота со стилями и CSS в Vue js для красивых интерфейсовСоздание и структурирование Vue.js приложенияКак исправить ошибку cannot find module vueНастройка и сборка проектов Vue с использованием современных инструментовИнтеграция Vue с Bitrix для корпоративных решенийРазработка административных панелей на Vue js
5 библиотек для создания tree view во VueИнтеграция Tailwind CSS с Vue для современных интерфейсовИнтеграция Vue с серверной частью и HTTPS настройкамиКак обрабатывать async операции с Promise во VueИнтеграция Node.js и Vue.js для разработки приложенийРуководство по интеграции Vue js в NET проектыПримеры использования JSX во VueГайд по импорту и регистрации компонентов на VueМногоязычные приложения на Vue с i18nИнтеграция FLIR данных с Vue5 примеров использования filter во Vue для упрощения разработки3 примера реализации drag-and-drop во Vue
Управление переменными и реактивными свойствами во VueПрименение v-bind для динамической привязки атрибутов в VueИспользование v for и slot в VueУправление пользователями и их данными в Vue приложенияхСоздание и использование UI Kit для Vue приложенийТипизация и использование TypeScript в VuejsИспользование шаблонов в Vue js для построения интерфейсовИспользование Swiper для создания слайдеров в VueРабота со стилями и стилизацией в VueСтруктура и особенности Single File Components SFC в VueРабота со SCSS в проектах на Vue для стилизацииРабота со скроллингом и прокруткой в Vue приложенияхПрименение script setup синтаксиса в Vue 3 для упрощения компонентовИспользование scoped стилей для изоляции CSS в компонентах Vue3 способа улучшить навигацию Vue с push()Обработка запросов и асинхронных операций в VueПонимание и использование provide inject для передачи данных между компонентамиПередача и использование props в Vue 3 для взаимодействия компонентовПередача данных между компонентами с помощью props в Vue jsУправление property и функциями во Vue.jsРабота со свойствами компонентов VueУправление параметрами и динамическими данными во VueРабота с lifecycle-хуком onMounted во VueОсновы работы с объектами в VueПонимание жизненного цикла компонента Vue js на примере mountedИспользование модальных окон modal в Vue приложенияхИспользование методов в компонентах Vue для обработки логикиИспользование метода map в Vue для обработки массивовИспользование хуков жизненного цикла Vue для управления состоянием компонентаРабота с ключами key в списках и компонентах VueОбработка пользовательского ввода в Vue.jsРабота с изображениями и их оптимизация в VueИспользование хуков жизненного цикла в VueОрганизация сеток и гридов для верстки интерфейсов на VueСоздание и управление формами в VueОрганизация файлов и структура проекта Vue.jsКомпоненты Vue создание передача данных события и emitРабота с динамическими компонентами и данными в Vue3 способа манипулирования DOM на VueРуководство по div во VueИспользование директив в Vue и их расширенные возможностиОсновы и применение директив в VueИспользование директив и их особенности на Vue с помощью defineИспользование компонентов datepicker в Vue для выбора датОрганизация циклов и итераций во VueКак работает компиляция Vue CoreСоздание и использование компонентов в Vue JSОбработка кликов и пользовательских событий в VueИспользование классов в Vue для организации кода и компонентовИспользование директивы checked для управления состоянием чекбоксов в VueГайд на checkbox компонент во VueОтображение данных в виде графиков с помощью Vue ChartСоздание и настройка кнопок в VueСоздание и настройка кнопок в Vue приложенияхРабота с lifecycle-хуками beforeCreate и beforeMount во VueИспользование массивов и методов их обработки в VueИспользование массивов и их обработка в Vue
Использование Vuetify для создания современных интерфейсов на VueИспользование transition во VueТестирование компонентов и приложений на VueРабота с teleport для управления DOM во VueИспользование Shadcn UI компонентов с Vue для продвинутых интерфейсовПять шагов по настройке SSR в VuejsИспользование router-link для навигации в Vue RouterКак использовать require в Vue для динамического импорта модулейРабота с динамическим рендерингом и виртуальным DOM на Vue.jsИспользование ref для управления ссылками и реактивностью в Vue 3Использование Vue Pro и его преимущества для профессиональной разработкиРуководство по nextTick для работы с DOMСоздание и использование компонентов с помощью Vue js и CУправление состоянием и реактивностью через inject и provideДинамическое обновление компонентов и данных на VueГлубокое изучение документации Vue и как эффективно её использоватьИспользование Crystal с Vue для разработкиИспользование вычисляемых свойств для динамического отображения данных на Vue jsОптимизация производительности и предупреждения в Vue
Открыть базу знаний

Отправить комментарий