Компонент v-carousel в библиотеке Vuetify предназначен для создания интерактивных слайд-шоу и каруселей изображений или других элементов. Он обеспечивает простую интеграцию с Vue.js, поддерживает адаптивность, автоматическую прокрутку и настраиваемые элементы управления.
<v-carousel>
<v-carousel-item
v-for="(item,i) in items"
:key="i"
:src="item.src"
></v-carousel-item>
</v-carousel>
В этом примере v-carousel-item отображает каждый слайд,
а массив items содержит объекты с полями src
для изображений.
Пример настройки автоматической прокрутки каждые 3 секунды с отображением стрелок:
<v-carousel
cycle
interval="3000"
show-arrows
>
<v-carousel-item
v-for="(item,i) in items"
:key="i"
:src="item.src"
></v-carousel-item>
</v-carousel>
Каждый слайд создаётся с помощью v-carousel-item. Этот компонент поддерживает:
Пример с текстовым слотом:
<v-carousel>
<v-carousel-item
v-for="(item,i) in items"
:key="i"
>
<v-sheet class="fill-height" color="primary">
<v-row class="fill-height" align="center" justify="center">
<v-col class="text-center">
<h1 class="white--text">{{ item.title }}</h1>
<p class="white--text">{{ item.description }}</p>
</v-col>
</v-row>
</v-sheet>
</v-carousel-item>
</v-carousel>
Vuetify предоставляет возможность задавать переходы с помощью свойств
transition и reverse-transition.
Значения можно брать из встроенных анимаций Vuetify, таких как
fade-transition, slide-x-transition,
slide-y-transition:
<v-carousel
transition="slide-x-transition"
reverse-transition="slide-x-reverse-transition"
>
С помощью v-model можно контролировать активный слайд. Это позволяет переключать слайды через события или кнопки вне карусели:
<v-carousel v-model="currentSlide">
<v-carousel-item v-for="(item,i) in items" :key="i" :src="item.src"></v-carousel-item>
</v-carousel>
<v-btn @click="currentSlide = (currentSlide + 1) % items.length">Следующий</v-btn>
Индикаторы (delimiters) автоматически отображаются снизу, но их можно настроить или скрыть:
Стрелки управления можно кастомизировать с помощью слотов:
<v-carousel>
<template #prev>
<v-btn icon><v-icon>mdi-chevron-left</v-icon></v-btn>
</template>
<template #next>
<v-btn icon><v-icon>mdi-chevron-right</v-icon></v-btn>
</template>
</v-carousel>
Карусель Vuetify полностью адаптивна. Для управления размерами можно
использовать CSS-классы height,
max-height, min-height, либо
встроенные классы Vuetify (fill-height, ma-0,
pa-0).
Пример задания фиксированной высоты с адаптивной шириной:
<v-carousel height="400">
Стилизация слайдов производится через v-sheet или
прямой CSS-стиль для v-carousel-item.
Пример остановки карусели при наведении:
<v-carousel
v-model="currentSlide"
cycle
@mouseenter="cycle = false"
@mouseleave="cycle = true"
>
Слайды можно создавать динамически из массива объектов. Любое обновление массива автоматически обновляет карусель. Можно использовать v-for с любыми данными: изображения, тексты, компоненты.
<v-carousel>
<v-carousel-item
v-for="item in slides"
:key="item.id"
>
<component :is="item.component" v-bind="item.props" />
</v-carousel-item>
</v-carousel>
Слайды можно комбинировать с сеткой Vuetify. Это удобно для создания сложных макетов с текстом, кнопками и изображениями в одном слайде:
<v-carousel>
<v-carousel-item>
<v-container>
<v-row>
<v-col cols="6">
<v-img src="image.jpg"></v-img>
</v-col>
<v-col cols="6">
<h2>Заголовок</h2>
<p>Описание слайда с текстом и кнопкой</p>
<v-btn color="secondary">Подробнее</v-btn>
</v-col>
</v-row>
</v-container>
</v-carousel-item>
</v-carousel>