记录swiper3.x版本loop为true轮播踩坑,附带解决方案

19 篇文章 0 订阅

loop为true时,踩坑记录。

loop为true时,swiper手动滑动后不再轮播

查看 swiper官网,找到autoplayDisableOnInteraction : false参数,设置后,发现没起作用。
在这里插入图片描述 观察发现,手动滑动时触发了 onAutoplayStop事件,那我们在 onAutoplayStop事件内重启loop就可以吧。
在这里插入图片描述
解决方案:利用swiperStartAutoplay事件和startAutoplay事件完成重启 loop轮播。

var mySwiper = new Swiper("#topNav", {
   autoplay : 4000,
   speed: 300,
   loop: true,
   onAutoplayStop: function(){
     // console.log('停止loop事件触发了;');
     swiperStartAutoplay();
   },
});

/*鼠标移入停止轮播,鼠标离开 继续轮播*/
var comtainer = document.getElementById('topNav'); // 获取元素
comtainer.onmouseenter = function () {
  mySwiper.stopAutoplay();
};
comtainer.onmouseleave = function () {
  mySwiper.startAutoplay();
};
function swiperStartAutoplay() {
  mySwiper.startAutoplay();
}

loop为true时,当第一次自动滚动结束时进行第二次滚动开始时,第一屏vue的click事件不生效

现象:当我们轮播图的图片轮播一圈后,你会发现之前可以点击的vue的click事件失效了。

原因分析

swiper官网中说明了,当我们开启loop模式时,会在原本slide前后复制若干个slide(默认一个)并在合适的时候切换,让Swiper看起来是循环的。
由于swiper只复制页面没有复制点击事件,此时我们用vue写的点击事件在页面循环一周回来遇到复制的页面时,点击事件就会失效。

在这里插入图片描述

解决方案:
最好采用原生的事件进行书写,如下:

<a :href="'#/newsDetail/' + item.id ">
  <span>{{item.desc}}</span>
</a>

loop为true时,页面渲染问题

当swiper的每个页面都设置了背景图时,在进行页面切换的过程中,会出现最后一张和第一张背景图被错位复制了一遍。原因如下:
在这里插入图片描述

解决方案:

var mySwiper = new Swiper("#topNav", {
    autoplay : 4000,
    loop: true,
    observer: true, //修改swiper自己或子元素时,自动初始化swiper
    observeParents: true, //修改swiper的父元素时,自动初始化swiper
    on: {
      slideChangeTransitionEnd: s => {
         s.slideToLoop(s.realIndex, 0, true) // 将当前位置设置到真实 dom 所在位置,解决页面无法渲染的BUG
      },
    }
});
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue2中使用Swiper5.x并引入animate,需要进行以下步骤: 1. 首先,在项目中安装Vue2和Swiper5.x,可以通过npm或yarn进行安装: ``` npm install vue@2.x swiper@5.x ``` 2. 在Vue的入口文件(通常是main.js)中导入Vue和Swiper: ```javascript import Vue from 'vue'; import Swiper from 'swiper'; import 'swiper/swiper-bundle.css'; ``` 3. 创建一个Vue组件,并在该组件中使用Swiper图插件。在Vue组件中导入SwiperAnimate插件: ```javascript import SwiperAnimate from 'swiper/animate'; export default { mounted() { SwiperAnimate.installModule(); }, }; ``` 4. 在组件的template中使用Swiper的HTML结构,并添加必要的类和属性: ```html <template> <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> </template> ``` 5. 在Vue组件的mounted钩子函数中,初始化Swiper实例并传入相应的配置项和选项: ```javascript import Swiper from 'swiper'; export default { mounted() { new Swiper('.swiper-container', { // 配置项和选项 loop: true, autoplay: true, speed: 300, // 其他配置项 }); }, }; ``` 6. 最后,在样式文件(如App.vue或单独的样式文件)中添加Swiper的样式,以及animate的样式: ```css @import 'swiper/swiper-bundle.css'; @import 'swiper/animate.min.css'; ``` 此时,你已经在Vue2中成功引入了Swiper5.x,并添加了animate动画插件。可以根据Swiper和animate的文档进行进一步的配置和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值