前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swiper组件使用loop属性,右滑再左滑点击事件不起效的解决办法

Swiper组件使用loop属性,右滑再左滑点击事件不起效的解决办法

作者头像
德顺
发布2023-08-25 12:45:19
1.1K0
发布2023-08-25 12:45:19
举报
文章被收录于专栏:前端资源

在 Vue 项目中使用 npm Swiper 组件,在测试时发现在某些情况下绑定的 click 事件不起效。因为在点击 banner 时要做一些判断,比如是否登录,是否实名认证等,所以必须解决这一问题。

在 swiper 组件启用了 loop 循环模式时,会在原本 slide 前后复制若干个slide(默认一个)并在合适的时候切换,让 Swiper 看起来是循环的。

例如我们有 3 张 Banner,查看代码会发现,loop 模式的 swiper 会在第 1 个 slide 的前面复制一个 3,在 3 个的后面复制了一个 1,这样就可以实现循环的效果了。

但是问题来了,如果给 swiper 中的 slide 绑定了click事件,调用了某个方法的话,复制出来的这两个 slide 并不会把事件也复制过来。

也就是说点击复制出来的这两个 slide 是没办法调用我们的方法的,根本没有任何反应,无法实现页面跳转。

解决办法:

我查了一下 Swiper 的代码,swiper 有一个 realIndex 属性,代表 slide 真实下标,我们可以通过下标来判断验证条件和跳转的页面。

写一个简单的 swiper :

代码语言:javascript
复制
<!--banner Swiper轮播-->
<swiper class="index-banner" :options="swiperOption" @click.native="bannerSwiperClick()" ref="mySwiper">
  <swiper-slide v-for="(item,index) in bannerSwiperImg" :key="index">
    <img width="100%" :src="item" alt="">
  </swiper-slide>
  <div class="swiper-pagination" slot="pagination"></div>
</swiper>

JS 部分:

代码语言:javascript
复制
data: function () {
  return {
    bannerSwiperImg: [
      "/static/img/ind-banner-1.png",
      "/static/img/ind-banner-2.png",
      "/static/img/ind-banner-3.png",
    ],
    swiperOption: {
      loop: true,
      pagination: {
        el:'.swiper-pagination',
        type:'bullets',
        clickable:true,
      },
    },
  };
},
methods: {
  bannerSwiperClick(){
    let that = this,
      ind = this.$refs.mySwiper.swiper.realIndex //获取下标
    if (ind < 2){//如果不是3
      if (!isLoggedIn()) {//判断未登录
        window.location = '/Login?St=1';//跳登录
      } else{//已登录
        if (isRealName() !== '1') {//判断是否实名
          this.showModal();//未实名弹窗
        } else {
            window.location = AIMS_URL;
        }
      }
    } else {
      window.location = '/';
    }
  },
},

这样就可以正常执行判断条件进行正常跳转了。使用组件虽然很方便,但有些时候还是很坑的。

说一下这里的 ref

ref 被用来给 DOM 元素或子组件注册引用信息。引用信息会根据父组件的 $refs 对象进行注册。如果在普通的 DOM 元素上使用,引用信息就是元素; 如果用在子组件上,引用信息就是组件实例。

@click.native

给 Vue 组件绑定事件时候,必须加上 native ,否则会认为监听的是来自 Item 组件自定义的事件

等同于在子组件中:子组件内部处理 click 事件然后向外发送 click 事件:$emit("click".fn)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-14),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决办法:
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档