Для карусели изображений с точками-делимитерами и автопрокруткой возьмите готовый CdsCarousel, для разделов с панелью навигации — CdsTabs, а для ленты, где видно сразу несколько элементов, — CdsSlideGroup.
Анатомия
Контейнер показывает один активный слайд CdsSlideViewItem, стрелки по краям листают к соседним — их включает проп show-arrows. v-model хранит индекс активного слайда — или значение из пропа value слайда, если он задан.
Вариации
Стрелки
По умолчанию стрелок нет — слайды листаются свайпом на тач-устройствах или программно через v-model. Проп show-arrows включает стрелки: true показывает их всегда, "hover" — только при наведении на слайд. Вместе со стрелками появляется и навигация с клавиатуры. Свайп отключается через :touch="false", иконки стрелок меняются пропами prev-icon и next-icon.
Вертикальные стрелки
Проп vertical-arrows собирает включённые через show-arrows стрелки в колонку у края слайда: true или 'left' — слева, 'right' — справа.
Непрерывное листание
Проп continuous замыкает слайды в кольцо: после последнего идёт первый. Без него на крайних слайдах соответствующая стрелка скрывается.
Направление
Проп direction="vertical" двигает слайды по вертикали — вместе с анимацией меняются и клавиши навигации: вместо ← / → работают ↑ / ↓.
Переходы
Проп crossfade заменяет сдвиг плавным растворением — подходит, когда слайды не выстроены в последовательность. У отдельного CdsSlideViewItem анимация настраивается пропами transition и reverse-transition: имя своей transition-анимации или false, чтобы отключить. Контент слайда рендерится при первом показе; проп eager рендерит его сразу — полезно для SEO.
Слоты
| Слот | Описание |
|---|---|
default | Слайды CdsSlideViewItem |
prev, next | Свои кнопки листания; получают props с onClick и aria-label |
additional | Контент после слайдов: индикаторы, счётчик, подписи |
Слот additional получает group с методами выбора — но чаще достаточно внешнего v-model, как в демо с точками-индикаторами.
Рекомендации
Сценарии использования
Пошаговая форма
Шаги анкеты переключаются кнопками через v-model: стрелки не включаем, а свайпы гасим через :touch="false" — движение только через «Назад» и «Далее». Высота контейнера анимируется под контент активного шага автоматически.
Отзывы клиентов
Цитаты не выстроены в последовательность, поэтому вместо сдвига — crossfade. Стрелки появляются при наведении (show-arrows="hover"), позицию показывает счётчик в слоте additional, а continuous листает отзывы по кругу.
Лента событий
Компактный виджет с вертикальным листанием: direction="vertical" двигает события снизу вверх, vertical-arrows="right" собирает стрелки в колонку у правого края.
API
CdsSlideView
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
continuous | boolean | undefined | — | Зацикливает перелистывание: с последнего слайда переход ведёт на первый и наоборот |
crossfade | boolean | undefined | — | Слайды сменяются плавным перекрестным затуханием вместо сдвига |
direction | "horizontal" | "vertical" | undefined | 'horizontal' | Переключение между горизонтальным или вертикальным отображением. |
disabled | boolean | null | undefined | null | Заблокированное состояние |
mandatory | boolean | "force" | undefined | — | Обязательный выбор хотя бы одного элемента |
max | number | undefined | — | Максимальное количество выбираемых элементов |
modelValue | any | — | Значение выбранных элементов группы |
multiple | boolean | undefined | — | Разрешить множественный выбор |
nextIcon | IconValue | undefined | 'chevron-right' | Иконка кнопки перехода к следующему слайду |
prevIcon | IconValue | undefined | 'chevron-left' | Иконка кнопки перехода к предыдущему слайду |
required | boolean | "force" | undefined | — | Обязательный выбор хотя бы одного элемента |
reverse | boolean | undefined | — | Инвертирует направление анимации перехода между слайдами |
selectedClass | string | undefined | — | CSS класс для выбранного состояния |
showArrows | string | boolean | undefined | — | Показывает стрелки навигации. 'hover' — только при наведении на компонент |
tag | string | JSXComponent<any> | undefined | 'div' | Пользовательский HTML-тег для отображения |
theme | string | undefined | — | Тема компонента |
touch | boolean | TouchHandlers | undefined | — | Управление перелистыванием свайпом: false отключает жесты, объект задаёт собственные обработчики касаний |
transitionDuration | number | undefined | — | Длительность анимации перехода между слайдами в миллисекундах |
verticalArrows | boolean | "left" | "right" | undefined | — | Размещает стрелки навигации вертикально: 'left' или 'right' — сторона, true — сторона по умолчанию |
События
| Имя | Тип | Описание |
|---|---|---|
update:modelValue | [] | Сработало при смене активного слайда. Передаёт значение нового активного слайда |
Слоты
| Имя | Тип | Описание |
|---|---|---|
additional | { group: GroupProvide; } | Дополнительный контент поверх слайдов — например точки-индикаторы или собственная навигация |
default | { group: GroupProvide; } | Слайды. В параметрах — состояние группы для управления активным слайдом |
next | { props: ControlProps; } | Кнопка перехода к следующему слайду. В параметрах — готовые пропсы для своей кнопки |
prev | { props: ControlProps; } | Кнопка перехода к предыдущему слайду. В параметрах — готовые пропсы для своей кнопки |
Exposed
| Имя | Тип | Описание |
|---|---|---|
group | GroupProvide | Состояние группы слайдов: список элементов, активный слайд и методы переключения. |
CdsSlideViewItem
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
disabled | boolean | null | undefined | null | Заблокированное состояние |
eager | boolean | undefined | — | Принудительно рендерит содержимое компонента при его использовании. Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO. |
reverseTransition | string | boolean | undefined | — | Переход при показе слайда в обратном направлении. Имя transition-компонента или false, чтобы отключить анимацию |
selectedClass | string | undefined | — | CSS класс для выбранного состояния |
transition | string | boolean | undefined | — | Переход при показе слайда в прямом направлении. Имя transition-компонента или false, чтобы отключить анимацию |
value | any | — | Значение компонента в группе |
События
| Имя | Тип | Описание |
|---|---|---|
group:selected | [value: { value: boolean; }] | Сработало при выборе слайда в группе. value — стал ли слайд активным |
Слоты
| Имя | Тип | Описание |
|---|---|---|
default | any | Контент слайда |
Exposed
| Имя | Тип | Описание |
|---|---|---|
groupItem | GroupItemProvide | Состояние слайда в группе: выбран ли он, его значение и метод переключения. |