一、需求问题
在之前的项目开发中,使用了swiper
插件。由于是vue
项目,对于swiper
的轮播图我们使用了v-show
命令,进行动态隐藏与显示。只有当点击进行一些操作以后,swiper
的轮播图才会显示出来。但是,在使用v-show
命令以后,swiper
的轮播图显示和分页不正常,样式出现问题,无法正常显示。
二、需求分析
在swiper
的配置中,我们一开始进行配置了pagination
和paginationType
。pagination
的配置是分页器容器的CSS
选择器或HTML
标签,paginationType
的配置是分页器样式类型。但是,一旦使用v-show
以后,就会出现问题。我们可以先配置observeParents
,这样将observe
应用于Swiper
的父元素,Swiper
的父元素变化时,Swiper
也会及时更新。然后再配置启动动态检查器,当改变swiper
的样式,比如隐藏或者显示,以及修改swiper
的子元素时,自动初始化swiper
。通过这两个设置,就可以完美解决这种问题了。
三、需求实现
- 实例代码显示如下:
<template>
<div class="container" @click="handleClick">
<div class="wrapper">
<swiper :options="swiperOptions">
<swiper-slide v-for="(item,index) of imgs" :key="index">
<img class="gallary-img" :src="item" />
</swiper-slide>
<div class="swiper-pagination" slot="pagination"></div>
</swiper>
</div>
</div>
</template>
<script>
export default {
name: 'CommonGallary',
data () {
return {
swiperOptions: {
pagination: '.swiper-pagination',
paginationType: 'fraction',
observeParents: true,
observer: true
}
}
},
props: {
imgs: {
type: Array,
default () { return [] }
}
},
methods: {
handleClick () {
this.$emit('close')
}
}
}
</script>
<style lang="stylus" scoped>
.container >>> .swiper-container
overflow: inherit
.container
display: flex
flex-direction: column
justify-content: center
z-index: 99
position: fixed
left: 0
right: 0
top: 0
bottom: 0
background: #000
.wrapper
height: 0
width: 100%
padding-bottom: 100%
.gallary-img
width: 100%
.swiper-pagination
color : #fff
bottom: -1rem
</style>