一、效果图
二、vue中html部分
<div class="swiper-container" ref="swiperDom">
<div class="swiper-wrapper">
<div class="swiper-slide" v-for="(item,index) in newsImageList" :key="index">
<img class="image" :src="item.imageUrl">
</div>
</div>
<div class="swiper-pagination"></div>
<div class="title pl-12">{{ swiperTitle }}</div>
</div>
三、vue中相关js代码
let state = reactive({
timer:null,
newsImageList:[],
async getImageList(){
let data={
page:PAGEITEM.page,
size:PAGEITEM.size,
}
let res = await getImageList(data)
if(res.code===SUCCESS_CODE){
state.newsImageList=res.data.records
}else{
state.newsImageList=[]
}
},
swiper: {},
swiperTitle:'',
initSwiper() {
//@ts-ignore
state.swiper = new Swiper(swiperDom.value, {
// Swiper的配置选项
pagination: {//页脚(标题部分)
el: '.swiper-pagination',
},
on:{//这里是为了实现手写title获取
transitionEnd : function(e){
let index=(e.activeIndex===(state.newsImageList.length+1))?1:e.activeIndex
state.swiperTitle=state.newsImageList[index-1].title
},
},
//自动轮播
autoplay: {
delay: 2500,//时间 毫秒
disableOnInteraction: false,//用户操作之后是否停止自动轮播默认true
},
loop:true,//循环 最后面一个往后面滑动会滑到第一个
});
},
});
onMounted(async () => {
await state.getImageList()
state.timer = setTimeout(() => {
state.initSwiper();
}, 100)
});
onUnMounted(()=>{
state.timer=null
})
四、less代码
.swiper-container {
width: 100%;
height: 100%;
position:relative;
:deep(.swiper-slide) {
width: 100%;
height: 100%;
img {
width: 100%;
height: 100%;
}
}
.title{
height: 50px;
line-height: 50px;
position: relative;
top:-50px;
color:#fff;
z-index: 10;
width: 70%;
.ellipsis;
}
:deep(.swiper-pagination){
background: rgba(00,00,00,.7);
height: 50px;
bottom: 0;
display: flex;
justify-content: flex-end;
align-items: center;
padding-right: 24px;
.swiper-pagination-bullet {
background: rgba(255,255,255,.9);
}
.swiper-pagination-bullet-active{
background: #fff;
}
}
}