Vue3-APP首页Swiper组件实现轮播图
引入Swiper,封装自己的Swiper组件
npm i swiper
引入初始代码
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
</div>
<!-- 如果需要分页器 -->
<div class="swiper-pagination"></div>
<!-- 如果需要导航按钮 -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<!-- 如果需要滚动条 -->
<div class="swiper-scrollbar"></div>
</div>
.swiper-container {
width: 600px;
height: 300px;
}
this.swiper = new Swiper ('#swiperIndex'+this.id, {
// direction: 'vertical', // 垂直切换选项
loop: this.loop, // 循环模式选项
autoplay: this.autoplay,
// 如果需要分页器
pagination: {
el: '.swiper-pagination',
clickable: true
},
on: {
slideChangeTransitionStart: ()=>{
this.$emit('slideChangeTransitionStart')
},
slideChangeTransitionEnd: ()=>{
this.$emit('slideChangeTransitionEnd')
}
}
})
根据自己的需要对格式进行调整,对结构进行删减
/*less*/
.swiper-container {
width: 100%;
height: 150px;
display: flex;
justify-content: center;
.swiper-slide {
width: 100%;
height: 150px;
display: flex;
justify-content: center;
img {
width: 96%;
height: 150px;
border-radius: 5px;
}
}
}
这里使用了slot插槽
<div class="swiper-container" :id="'swiperIndex'+id">
<div class="swiper-wrapper">
<div class="swiper-slide" v-for="(item,i) in imgList" :key="i">
<slot :item="item"></slot>
</div>
</div>
<!-- 如果需要分页器 -->
<div class="swiper-pagination"></div>
</div>
在props
中给参数默认值
props: {
imgList: {
type: Array,
default: []
},
loop: {
type: Boolean,
default: true
},
autoplay: {
type: Boolean,
default: false
}
},
提取成一个新的组件等待调用即可。
在首页引用上一步封装的Swiper组件
在上一步封装的组件里使用了插槽,在引用组件时,需传入组件需要的props
<Swiper
@click="swiperFn"
ref="mySwiper"
class="swiper"
:imgList="imgList"
style="position: relative"
:autoplay="true"
>
<!--template组件不会渲染DOM-->
<template v-slot="slotProps">
<img :src="slotProps.item.pic" alt />
<span
class="tag"
style="position: absolute; bottom: 5px; right: 20px; background:red;padding: 0 5px; border-radius: 3px;color:#fff;"
>新歌首发</span>
</template>
</Swiper>
效果图