1.在components路径下新建文件Carousel.vue,在Carousel.vue文件中创建一个 Vue 组件实现轮播图的功能
<button @click="prev" class="carousel-control prev">‹
<button @click="next" class="carousel-control next">›
<span v-for="(item, index) in items" :key="index"
:class="{'active': currentIndex === index}"
@click="goToIndex(index)">
<script>
export default {
data() {
return {
currentIndex: 0,
items: [
require('../assets/logo.png'),
require('../assets/logo.png'),
],
interval: null
};
},
computed: {
carouselStyle() {
return {
transform: `translateX(-${this.currentIndex * 100}%)`,
transition: 'transform 0.5s ease-in-out'
};
}
},
methods: {
prev() {
this.currentIndex = (this.currentIndex - 1 + this.items.length) % this.items.length;
},
next() {
this.currentIndex = (this.currentIndex + 1) % this.items.length;
},
goToIndex(index) {
this.currentIndex = index;
},
startAutoplay() {
this.interval = setInterval(() => {
this.next();
}, 3000);
},
stopAutoplay() {
clearInterval(this.interval);
}
},
mounted() {
this.startAutoplay();
},
beforeDestroy() {
this.stopAutoplay();
}
};
</script>
<style scoped>
.carousel {
position: relative;
width: 100%;
overflow: hidden;
}
.carousel-inner {
display: flex;
transition: transform 0.5s ease-in-out;
}
.carousel-item {
min-width: 100%;
box-sizing: border-box;
}
.carousel-image {
width: 100%;
display: block;
}
.carousel-control {
position: absolute;
top: 50%;
transform: translateY(-50%);
background: rgba(0, 0, 0, 0.5);
color: #fff;
border: none;
cursor: pointer;
padding: 10px;
font-size: 18px;
}
.prev {
left: 10px;
}
.next {
right: 10px;
}
.carousel-dots {
position: absolute;
bottom: 10px;
left: 50%;
transform: translateX(-50%);
display: flex;
}
.carousel-dots span {
height: 10px;
width: 10px;
margin: 0 5px;
background-color: #bbb;
border-radius: 50%;
display: inline-block;
cursor: pointer;
}
.carousel-dots .active {
background-color: #717171;
}
</style>
*items: []中为存在assets文件夹下的图片列表
2.在主 Vue 实例中,或者在任何其他组件中,可以使用刚刚创建的轮播图组件。
<script>
import Carousel from './components/Carousel.vue';
export default {
components: {
Carousel
}
};
</script>
<style>
#app {
text-align: center;
font-family: Avenir, Helvetica, Arial, sans-serif;
color: #2c3e50;
margin-top: 60px;
}
</style>
carousel-inner 使用 CSS transform 属性来移动图片的视图,实现轮播效果。箭头按钮和指示点样式也被定义。
在 mounted 生命周期钩子中启动自动播放,并在 beforeDestroy 钩子中停止它。
效果: