vue如何解决轮播图(Swiper)第一张图片一闪而过问题
vue轮播图(Swiper)第一张图片一闪而过
解决方式
初始化(Swiper)时,外层添加一个定时器
代码:
setTimeout(function() { var mySwiper = new Swiper($(el), { autoplay: true,//可选选项,自动滑动 speed:500,//切换时间 loop : true, pagination : pagination, paginationType : paginationType, // observer:true, // observeParents:true, // onSlideChangeStart: function(swiper){ // swiper.update(); // swiper.reLoop(); // }, prevButton: $(el).find('.swiper-button-prev'), nextButton: $(el).find('.swiper-button-next'), }) }, 500)
vue图片轮播实现过程
效果图:
由于没有素材就随便找了123456来代替选中的圆点。
实现思路
首先绑定数据源,循环出每个图片,在通过isShow字段来判断是否显示图片。在图片元素写这两个 v-bind:src="item.src" v-show="item.isShow" 一个src用来显示图片,show用来判断图片是否显示。
再为123456下面这个导航添加点击事件,通过点击的元素来设置该数据显示出图片,同时其他图片隐藏。
然后在vue created方法调用开始循环事件,来实现图片轮播。并用一个属性记录起来,方便后面停止循环。
开启轮播后,判断当前显示的图片是否是最后一张如果是就从1开始,如果不是则下标加+1去显示下一张图片。
全部代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue轮播图</title> </head> <script src="vue.min.js"></script> <script src="clipboard.min.js"></script> <link rel="stylesheet" type="text/css" href="bootstrap.min.css"/> <style type="text/css"> #test{text-align: center;margin:0 auto;} .baner{} .baner img{width:700px;height: 500px;} .num{margin-top: 20px} .num a{color: black;} .num a span{ margin-left: 30px;font-size: 20px; text-decoration:none;} /*.num a:hover{color: red;}*/ .isSelect {color: red;} </style> <body> <div id="test"> <h1>vue轮播图</h1> <div class="baner"> <div class="banerimg" v-for="item in dataList"> <img v-bind:src="item.src" v-show="item.isShow"> </div> <div class="num" @mouseover="focusImg()" @mouseout="startInterval"> <a href="javascript:void(0)" v-for="item in dataList" @click="changeImg(item.seq)"> <span :class={'isSelect':item.isShow}>{{item.seq}}</span> </a> </div> </div> </div> </body> <script > new Vue({ el : "#test", data: { interval:'', dataList:[ {name:'1',src:'banerSroll1.jpg',isShow:true,seq:1}, {name:'2',src:'banerSroll2.jpg',isShow:false,seq:2}, {name:'3',src:'banerSroll3.jpg',isShow:false,seq:3}, {name:'4',src:'banerSroll4.jpg',isShow:false,seq:4}, {name:'5',src:'banerSroll5.jpg',isShow:false,seq:5}, {name:'6',src:'banerSroll6.jpg',isShow:false,seq:6}, ], }, created:function(){ this.startInterval(); }, methods:{ changeImg :function(seq){ var newData = this.dataList; for (var i = 0;i <newData.length; i++) { if(newData[i].seq==seq) newData[i].isShow=true; else newData[i].isShow=false; } this.dataList = newData; }, startInterval:function(){ let that = this; this.interval = setInterval(function(){ that.scollImg(); },1000) }, scollImg:function(){ var newData = this.dataList.filter(function(val){return val.isShow})[0]; if(newData.seq==this.dataList.length){ this.changeImg(1); }else{ this.changeImg(newData.seq+1); } }, focusImg :function(){ clearInterval(this.interval); } }, computed :function(){ } }) </script> </html>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
详解vue之自行实现派发与广播(dispatch与broadcast)
这篇文章主要介绍了详解vue之自行实现派发与广播(dispatch与broadcast),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01
最新评论