Как создать цикл по 3 слайда сразу в карусели BootstrapVue?
Код выглядит следующим образом:
<template lang="pug">
b-carousel.d-none.d-sm-block(
id='categoryRoulette'
controls
no-animation
:interval='0'
@sliding-start="onSlideStart"
@sliding-end="onSlideEnd"
)
b-carousel-slide(
v-for="category in chunkedCatalog"
:key="category.permalink"
)
template(v-slot:img)
b-card-group(deck)
b-card(
v-for="(item, index) in category" :key="index"
:img-src="item.image ? item.image : '../assets/images/blank.png'"
img-alt='Image'
img-top
tag='article'
)
b-card-text.d-flex.justify-content-center.align-items-center
h5
a(href="#") {{ item.title }}
</template>
<script lang="ts">
import Vue from 'vue'
import testData from '../data/testData.json'
import { RouletteData } from '../types/roulette'
export default Vue.extend({
data: (): RouletteData => ({
slide: 0,
sliding: false,
catalog: [],
}),
computed: {
chunkedCatalog() {
const chunkedArray = []
for (let i = 0; i < this.catalog.length; i += 3) {
chunkedArray.push(this.catalog.slice(i, i + 3))
}
return chunkedArray
},
},
mounted(): void {
this.catalog = testData.catalog
},
methods: {
onSlideStart(slide: any) {
this.sliding = true
console.log('slide =', slide)
},
onSlideEnd(slide: any) {
this.sliding = false
console.log('slide =', slide)
},
},
})
</script>
<style lang="sass">
#categoryRoulette
margin-bottom: 40px
margin-top: 40px
.carousel-control-prev-icon
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%232E86C1' class='bi bi-chevron-left' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3E%3C/svg%3E") !important
height: 100px !important
margin-left: -300px
width: 100px !important
.carousel-control-next-icon
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%232E86C1' class='bi bi-chevron-right' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E") !important
height: 100px !important
margin-right: -300px
width: 100px !important
</style>
Нужно создать карусель, которая будет отображать 3 слайда сразу, и нажать на кнопку next/previous, чтобы отобразить следующие/предыдущие 3 слайда. Обратите внимание - нужно отображать не слайд за слайдом, а 3 слайда сразу.
Я пытался использовать массив и делать куски, но это работает только до конца массива. Например, если у меня есть 5 слайдов, он отображает сначала 3 (это нормально), а затем только 2 (это не нормально). Нажимая кнопку далее, отображаются снова первые 3 слайда и так далее.
Как должно работать? Надо отображать первые 3 слайда из 5, а при следующем щелчке надо также отображать 3 слайда - последние 2 слайда из 5 и снова первый слайд. При следующем щелчке надо отображать слайды с индексами 2, 3 и 4 и так далее.
В обратном направлении (previous) все тоже самое.