<template>
<div class="carousel">
<div class="slides" :style="{ transform: `translateX(-${currentSlide * 100}%)` }">
<div v-for="(image, index) in images" :key="index">
<img :src="image" alt="">
</div>
</div>
<button @click="prevSlide">Previous</button>
<button @click="nextSlide">Next</button>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted, onUnmounted } from 'vue';
const images = ref([
'image1.jpg',
'image2.jpg',
'image3.jpg',
// Add more images here
]);
let currentSlide = ref(0);
let timer = null;
const nextSlide = () => {
currentSlide.value = (currentSlide.value + 1) % images.value.length;
};
const prevSlide = () => {
currentSlide.value = (currentSlide.value - 1 + images.value.length) % images.value.length;
};
onMounted(() => {
timer = setInterval(nextSlide, 3000); // Change slides every 3 seconds
});
onUnmounted(() => {
clearInterval(timer);
});
</script>
<style scoped>
.carousel {
position: relative;
width: 100%;
height: 400px;
overflow: hidden;
}
.slides {
display: flex;
width: 100%;
height: 100%;
transition: transform 1s;
}
.slides > div {
flex: 0 0 100%;
height: 100%;
}
.slides img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
vue3 css 实现轮播图
于 2024-01-08 16:00:48 首次发布
![](https://img-home.csdnimg.cn/images/20240709112858.png)