Для переключения контента без делимитеров и автопрокрутки возьмите CdsSlideView, на котором построена карусель, а для одиночного изображения — CdsImage.
Анатомия
Карусель складывается из слайдов, стрелок навигации, точек-делимитеров и опционального прогресс-бара. Стрелки и точки листают по кругу: после последнего слайда идёт первый.
Вариации
Изображения
CdsCarouselItem объединяет слайд и CdsImage — передавайте ему любые пропсы изображения: src, alt, cover, gradient. Высоту карусели задаёт проп height (по умолчанию 500).
Произвольный контент
Слайд не обязан быть картинкой: положите в слот CdsCarouselItem любую разметку — она растянется на весь кадр.
Автопрокрутка
Проп cycle листает слайды автоматически, interval задаёт паузу в миллисекундах (по умолчанию 6000). Таймер перезапускается после ручного переключения — пользователь всегда успевает досмотреть слайд.
Прогресс
Проп progress добавляет прогресс-бар позиции внизу карусели. Значение-строка задаёт цвет — любой из токенов, которые принимает CdsProgressBar.
Делимитеры
Пропы управляют точками навигации: hide-delimiters убирает их совсем, hide-delimiter-background — только подложку, vertical-delimiters (left / right) ставит точки вертикально у края, delimiter-icon меняет иконку точки.
Слот item заменяет точку своим элементом: он получает готовые пропсы делимитера (клик, aria-label, класс активности) и сам элемент группы — останется только развесить их через v-bind.
Стрелки
Пропы стрелок наследуются от CdsSlideView: show-arrows="hover" показывает их только при наведении, :show-arrows="false" убирает совсем, prev-icon / next-icon меняют иконки, а слоты prev / next — сами кнопки.
Рекомендации
Сценарии использования
Промо-баннеры
Классическая ротация баннеров: cycle с interval в 5 секунд листает сам, progress показывает, когда сменится слайд. Текст и кнопка лежат в слоте слайда, а gradient из CdsImage затемняет верх кадра под ними — так они читаются на любом изображении.
Галерея с миниатюрами
Точки заменены миниатюрами: hide-delimiters убирает штатные делимитеры, а клик по миниатюре меняет v-model. Счётчик рядом считает слайды от того же v-model — карусель, миниатюры и счётчик всегда синхронны.
Вертикальная лента
Лента историй в духе соцсетей: direction="vertical" листает кадры сверху вниз, vertical-arrows="left" и vertical-delimiters="right" разводят стрелки и точки по боковым краям, освобождая кадр. Карточка автора и счётчик лежат в абсолютном слое поверх карусели: pointer-events-none пропускает клики к стрелкам, а транзишен по ключу v-model меняет карточку вместе со слайдом.
Онбординг
Шаги знакомства с продуктом: стрелки выключены (:show-arrows="false"), движение контролируют кнопки «Назад» и «Далее» через v-model. На последнем шаге «Далее» превращается в призыв к действию.
API
CdsCarousel
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
color | string | undefined | — | Цвет активного делимитера и прогресс-бара |
continuous | boolean | undefined | true | Зацикливает перелистывание: с последнего слайда переход ведёт на первый и наоборот |
crossfade | boolean | undefined | — | Слайды сменяются плавным перекрестным затуханием вместо сдвига |
cycle | boolean | undefined | — | Автоматическое переключение слайдов через заданный интервал |
delimiterIcon | IconValue | undefined | 'dot' | Иконка делимитера (точки навигации) |
direction | "horizontal" | "vertical" | undefined | 'horizontal' | Переключение между горизонтальным или вертикальным отображением. |
disabled | boolean | null | undefined | null | Заблокированное состояние |
height | string | number | undefined | 500 | Высота карусели |
hideDelimiterBackground | boolean | undefined | — | Скрыть подложку под делимитерами |
hideDelimiters | boolean | undefined | — | Скрыть делимитеры (точки навигации) |
interval | string | number | undefined | 6000 | Интервал автопереключения слайдов в миллисекундах (при включённом cycle) |
mandatory | boolean | "force" | undefined | 'force' | Обязательный выбор хотя бы одного элемента |
max | number | undefined | — | Максимальное количество выбираемых элементов |
modelValue | any | — | Значение выбранных элементов группы |
multiple | boolean | undefined | — | Разрешить множественный выбор |
nextIcon | IconValue | undefined | 'chevron-right' | Иконка кнопки перехода к следующему слайду |
prevIcon | IconValue | undefined | 'chevron-left' | Иконка кнопки перехода к предыдущему слайду |
progress | string | boolean | undefined | — | Отображать прогресс-бар текущего слайда. Строка задаёт цвет прогресс-бара |
required | boolean | "force" | undefined | — | Обязательный выбор хотя бы одного элемента |
reverse | boolean | undefined | — | Инвертирует направление анимации перехода между слайдами |
selectedClass | string | undefined | — | CSS класс для выбранного состояния |
showArrows | string | boolean | undefined | true | Показывает стрелки навигации. '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 — сторона по умолчанию |
verticalDelimiters | boolean | "left" | "right" | undefined | — | Вертикальное расположение делимитеров: left, right или true (слева) |
События
| Имя | Тип | Описание |
|---|---|---|
update:modelValue | [] | Срабатывает при смене активного слайда. |
Слоты
| Имя | Тип | Описание |
|---|---|---|
default | { group: GroupProvide; } | Слайды. В параметрах — состояние группы для управления активным слайдом |
item | { props: CarouselDelimiterProps; item: { id: string; value: unknown; disabled: boolean | undefined; }; } | Кастомный делимитер (точка навигации) для каждого слайда. |
next | { props: ControlProps; } | Кнопка перехода к следующему слайду. В параметрах — готовые пропсы для своей кнопки |
prev | { props: ControlProps; } | Кнопка перехода к предыдущему слайду. В параметрах — готовые пропсы для своей кнопки |
CdsCarouselItem
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
absolute | boolean | undefined | — | Позиционирует изображение как position: absolute, заполняя родителя. |
alt | string | undefined | — | Альтернативный текст изображения (атрибут alt). |
aspectRatio | string | number | undefined | — | Соотношение сторон контента. Например 1.7778 (16/9) или '4/3'. |
color | string | undefined | — | Цвет фона-плейсхолдера, отображаемого во время загрузки. |
contentClass | any | — | CSS-класс, применяемый к обёртке контента. |
cover | boolean | undefined | — | Масштабирует изображение, чтобы оно полностью закрывало контейнер (object-fit: cover). |
crossorigin | "" | "anonymous" | "use-credentials" | undefined | — | Значение атрибута crossorigin. |
disabled | boolean | null | undefined | null | Заблокированное состояние |
draggable | boolean | "true" | "false" | undefined | — | Управляет возможностью перетаскивания изображения (атрибут draggable). |
eager | boolean | undefined | — | Принудительно рендерит содержимое компонента при его использовании. Это полезно, если у вас есть контент, который не отображается в DOM, но который необходимо проиндексировать для SEO. |
gradient | string | undefined | — | CSS-градиент, накладываемый поверх изображения. Например 'to top, rgba(0,0,0,.4), transparent'. |
height | string | number | undefined | — | Высота компонента |
imageClass | any | — | CSS-класс, применяемый к внутреннему элементу <img>. |
inline | boolean | undefined | — | Отображает компонент как inline-блок (inline-flex) вместо блочного. |
lazySrc | string | undefined | — | Источник изображения-заглушки низкого качества, показываемого до загрузки основного. |
maxHeight | string | number | undefined | — | Максимальная высота компонента |
maxWidth | string | number | undefined | — | Максимальная ширина компонента |
minHeight | string | number | undefined | — | Минимальная высота компонента |
minWidth | string | number | undefined | — | Минимальная ширина компонента |
options | IntersectionObserverInit | undefined | {} | Опции IntersectionObserver для ленивой загрузки. |
position | string | undefined | — | Значение object-position для позиционирования изображения внутри контейнера. |
referrerpolicy | "origin" | "no-referrer" | "no-referrer-when-downgrade" | "origin-when-cross-origin" | "same-origin" | "strict-origin" | "strict-origin-when-cross-origin" | "unsafe-url" | undefined | — | Значение атрибута referrerpolicy. |
reverseTransition | string | boolean | undefined | — | Переход при показе слайда в обратном направлении. Имя transition-компонента или false, чтобы отключить анимацию |
selectedClass | string | undefined | — | CSS класс для выбранного состояния |
sizes | string | undefined | — | Значение атрибута sizes для адаптивных изображений. |
src | string | CdsImageSrcObject | undefined | '' | Источник изображения. Строка или объект с src/srcset/lazySrc/aspect. |
srcset | string | undefined | — | Набор источников изображения для разных разрешений (атрибут srcset). |
theme | string | undefined | — | Тема компонента |
transition | string | boolean | undefined | — | Переход при показе слайда в прямом направлении. Имя transition-компонента или false, чтобы отключить анимацию |
value | any | — | Значение компонента в группе |
width | string | number | undefined | — | Ширина компонента |
Слоты
| Имя | Тип | Описание |
|---|---|---|
default | any | Контент, отображаемый поверх изображения. |
error | any | Содержимое, отображаемое при ошибке загрузки изображения. |
placeholder | any | Содержимое, отображаемое во время загрузки изображения. |
sources | any | Дополнительные элементы <source> для тега <picture>. |