Swiper.js
Swiper Slider is the most modern free mobile touch slider with hardware accelerated transitions and amazing native behavior. For more details
Installing via npm
npm i swiper
Script
<template>
<div class="swiper-container mySwiper iq-width overflow-hidden mx-auto">
<swiper ref="swiperRef" :effect="'coverflow'" :grab-cursor="true" :centered-slides="true" :slides-per-view="4"
:space-between="40" :coverflow-effect="{
rotate: 0,
stretch: 0,
depth: 142,
modifier: 1,
slideShadows: true,
}" :loop="true" :breakpoints="{
0: { slidesPerView: 2, spaceBetween: 20 },
375: { slidesPerView: 2, spaceBetween: 20 },
768: { slidesPerView: 3, spaceBetween: 30 },
1024: { slidesPerView: 5, spaceBetween: 30 },
1500: { slidesPerView: 5, spaceBetween: 30 },
}" @swiper="onSwiper">
<swiper-slide v-for="(slide, index) in slides" :key="index" @click="() => slideToCenter(index)">
<img class="img-fluid w-100 rounded" :src="generateImgPath(`/assets/images/${slide}`)" alt="image" />
</swiper-slide>
</swiper>
</div>
</template>
<script setup>
import { Swiper, SwiperSlide } from 'swiper/vue';
import { ref } from 'vue';
import SwiperCore, { EffectCoverflow, Navigation, Autoplay } from 'swiper/core';
SwiperCore.use([EffectCoverflow, Navigation, Autoplay]);
const slides = ref([
'swiper/01.jpg',
'swiper/02.jpg',
'swiper/03.jpg',
'swiper/04.jpg',
'swiper/05.jpg',
'swiper/06.jpg',
'swiper/07.jpg',
'swiper/08.jpg',
'swiper/09.jpg'
]);
const swiperRef = ref(null);
let swiperInstance = null;
const onSwiper = (swiper) => {
swiperInstance = swiper;
};
const slideToCenter = (index) => {
if (swiperInstance) {
swiperInstance.slideToLoop(index);
}
};
</script>