vue使用swiper的时候第二轮事件不会触发问题

 更新时间:2022年09月08日 15:42:06   作者:小菜鸟学代码··  
这篇文章主要介绍了vue使用swiper的时候第二轮事件不会触发问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用swiper的时候第二轮事件不会触发

首先说明导致这样的结果的原因:官方解释是轮播在循环轮播的时候他是前面复制一份后面复制一份,这样看起来就是无缝滚动,但是在复制的时候不会复制事件,所以会有事件不会触发

解决这种有两种方法

  • 第一种loop为false,这样没有复制元素自然也不存在复制事件这一说法
  • 第二种重新写options

第一步定义ref跟重新定义options

data里面是不需要的

计算属性里面写个事件swiper事件是原swiper自带的在点击的时候computed会自动监听跟watch差不多(缓存),然后让其指向我们当前使用的swiper让其有原生的方法,swiper里面有个on属性 里面是绑定事件让其执行swiper方法,返回当前dom,常用的获取id的方式

clickedSlide当前轮播dom

activeIndexloop模式下注意该值会被加上复制的slide数

realIndex与activeIndex不同的是,在loop模式下不会将复制的块的数量计算在内。

常用获取的方法 其余看文档

切记:最后要将optins返回 然后绑定值options

  computed: {
  
    swiper() {
      return this.$refs.mySwiper.swiper
    },
    swiperOption() {
      let option = {
        slidesPerView: 5,
        // height: 'auto',
        autoplay: {
          delay: 3000,
          stopOnLastSlide: false,
          /* 触摸滑动后是否继续轮播 */
          disableOnInteraction: false
        },
        spaceBetween: 1,
        // observer: true,//修改swiper自己或子元素时,自动初始化swiper
        // observeParents: true,//修改swiper的父元素时,自动初始化swiper 
        direction: "vertical", //设置垂直滚动方向
        speed: 800,//滚动速度
        grabCursor: true,
        loop: true,//循环滚动
        on: {
          click: (swiper) => {
            console.log(this.date[this.swiper.clickedSlide.getAttribute('data-index')].userId);
            this.$store.commit("showDialog5", this.date[this.swiper.clickedSlide.getAttribute('data-index')].userId);
          },
        },
      }
      return option
    }
  },

swiper点击事件无效的问题

现象

添加在swiper-slide里面的点击事件有时能点击有时不能点击

分析

只有在设置了loop:true的情况下才会出现这个问题

原因

swiper通过复制dom节点来实现无限滚动,但没有复制元素上绑定的事件

解决方法

在轮播配置里面定义事件,即options里面,这样的话可以解决不能点击的问题

但有时候需求会复杂一点,比如需要点击轮播图里面特定元素,做出不同的响应事件,这时候就需要做一些另外的工作来辅助完成。

首先要将 preventLinksPropagation设置成false,防止冒泡。

然后通过判断点击的元素的类名来响应不同的事件,这个时候,我们可能需要给事件传递参数,但是需要传递的参数是通过v-for生成的,如何传递,这里我的做法是将参数放到元素的自定义属性里面 然后再获取自定义属性。

<swiper ref="mySwiper" :options="swiperOption">
swiperOption: {
        spaceBetween: 10,
        loop: true,
        slidesPerView: 'auto',
        loopedSlides: 3,
        slidesOffsetBefore: (document.body.clientWidth * 0.2) / 2,
        preventLinksPropagation: false,
        on: {
          click: (v) => {
            const item = {
              a: v.target.getAttribute('data-a'),
              b: v.target.getAttribute('data-b'),
              c: v.target.getAttribute('data-c')
            }
            switch (v.target.className) {
              case 'a':
                this.handlegg(0)
                break
              case 'b':
                this.handlegg(1, item)
                break
              case 'c':
                this.handlegg(2, item)
                break
            }
          }
        }
      }

轮播图里面某元素

<div v-else class="xxx">
 <div 
    class="c"
    :data-a="item.a" 
    :data-b="item.b" 
    :data-c="item.c"
    ></div>
  <div>立即开通</div>
</div>

问题解决。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue3自定义组件之v-model实现父子组件双向绑定

    vue3自定义组件之v-model实现父子组件双向绑定

    这篇文章主要介绍了vue3自定义组件之v-model实现父子组件双向绑定方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 一文详解Vue中的虚拟DOM与Diff算法

    一文详解Vue中的虚拟DOM与Diff算法

    vue中的diff算法时常是面试过程中的考点,本文将为大家讲解何为diff以及diff算法的实现过程,那么在了解diff之前,我们需要先了解虚拟DOM是什么,需要的朋友可以参考下
    2024-02-02
  • VUE搭建手机商城心得和遇到的坑

    VUE搭建手机商城心得和遇到的坑

    这篇文章主要介绍了VUE搭建手机商城心得和遇到的坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Vue使用provide各种传值后inject获取undefined的问题及解决

    Vue使用provide各种传值后inject获取undefined的问题及解决

    这篇文章主要介绍了Vue使用provide各种传值后inject获取undefined的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Vue组件通信传递数据的三种方式

    Vue组件通信传递数据的三种方式

    这篇文章主要介绍了Vue组件通信传递数据的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-04-04
  • Vue3.x使用mitt.js进行组件通信

    Vue3.x使用mitt.js进行组件通信

    Vue2.x 使用 EventBus 进行组件通信,而 Vue3.x 推荐使用 mitt.js。本文就介绍一下mitt.js的具体使用方法,感兴趣的可以了解一下
    2021-06-06
  • 使用vue的v-for生成table并给table加上序号的实例代码

    使用vue的v-for生成table并给table加上序号的实例代码

    这篇文章主要介绍了使用vue的v-for生成table并给table加上序号的相关资料,需要的朋友可以参考下
    2017-10-10
  • 浅谈vue 单文件探索

    浅谈vue 单文件探索

    这篇文章主要介绍了浅谈vue 单文件探索,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • vue实现pdf文档在线预览功能

    vue实现pdf文档在线预览功能

    这篇文章主要为大家详细介绍了vue实现pdf文档在线预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 详解Vue中是如何实现cache缓存的

    详解Vue中是如何实现cache缓存的

    这篇文章分享一个比较有意思的东西,那就是Vue中如何实现cache缓存的,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-07-07

最新评论