文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

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

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

解决这种有两种方法

第一步定义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>

问题解决。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯