> 最近有个需求需要将网站首页的 banner 弄成轮播效果的,同事推荐使用 swiper 来实现,记录一下。
swiper 官网地址:https://www.swiper.com.cn/

#### 1、swiper 初始化
文章转载自:Swiper中文网 [https://www.swiper.com.cn]
```
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">slider1</div>
<div class="swiper-slide">slider2</div>
<div class="swiper-slide">slider3</div>
</div>
</div>
<script>
var mySwiper = new Swiper('.swiper-container', {
autoplay: true,//可选选项,自动滑动
})
</script>
```
我设置的参数:
```
initSwiper: function() {
var mySwiper = new Swiper('.swiper-container', {
autoplay: { // 自动切换
delay: 5000, // 自动切换时间
stopOnLastSlide: false, // 如果设置为true,当切换到最后一个slide时停止自动切换。(loop模式下无效)。
disableOnInteraction: false, // 用户操作swiper之后,是否禁止autoplay。默认为true:停止。
},
pagination: { // 分页器
el: '.swiper-pagination',
clickable: true, // 此参数设置为true时,点击分页器的指示点分页器会控制Swiper切换。
},
observer: true, // 启动动态检查器(OB/观众/观看者),当改变swiper的样式(例如隐藏/显示)或者修改swiper的子元素时,自动初始化swiper。
observerParents: true, // 将observe应用于Swiper的父元素。当Swiper的父元素变化时,例如window.resize,Swiper更新。
// 自动高度
autoHeight: true, // 自动高度。设置为true时,wrapper和container会随着当前slide的高度而发生变化。
loop: true, // 设置为true 则开启loop模式。loop模式:会在原本slide前后复制若干个slide(默认一个)并在合适的时候切换,让Swiper看起来是循环的。 loop模式在与free模式同用时会产生抖动,因为free模式下没有复制slide的时间点。
})
},
```
请求后台得到数据后调用初始化方法:
```
that.$nextTick(function () {
this.initSwiper();
})
```
#### 2、遇到的问题
1. 刚开始这个方法写到 mounted 钩子函数里,但是第一次轮播时,第一张图片展示不出来,第二张图就可以了。
查了半天感觉是初始化得有问题,然后把调用初始化的方法写到 ajax 请求后,获取到数据后就进行初始化。修改后,问题解决。
1. 图片使用懒加载,第一次加载时图片下方出现空白区域
这个问题真是头疼,图片用了懒加载,所以没加载处理,所以会出现空白,查了资料可以第一张图不使用懒加载,其他图片继续使用懒加载。
修改如下:
```
<img :src="newbanner.bannerPcImg" v-if="key==0" alt="">
<img v-lazy="newbanner.bannerPcImg" v-if="key!=0" alt="">
<img :src="newbanner.bannerMobileImg" v-if="key==0" alt="">
<img v-lazy="newbanner.bannerMobileImg" v-if="key!=0" alt="">
```
修改后,问题解决~

Vue实现轮播效果