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

目录
  • 使用swiper的时候第二轮事件不会触发
    • 解决这种有两种方法
  • 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>

问题解决。

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

(0)

相关推荐

  • Vue使用Swiper的案例详解

    Vue使用Swiper看这一篇就够了 此案例实现需求 完成swiper动态异步数据下的slide渲染 自定义分页器样式 解决loop:true设置时的事件丢失问题 swiper鼠标移入/移出 暂停/开始轮播 单页面渲染多个swiper组件互不影响 1.引入swiper npm i swiper@5.2.0 2.创建轮播图组件CarouselContainer.vue,详细解析在代码注释中 <template> <div class="CarouselContainer"

  • vue中使用swiper轮播图的正确姿势(亲测有效)

    目录 前言 1.新建vue项目 2.装swiper的包 3.使用swiper 总结 前言 网上搜了一大堆在vue中如何使用swiper,结果搜出来一堆垃圾,也不知道从哪里复制的,吐槽完毕.假设你是个新手,我从新建项目开始跟你讲,以下是步骤. 1.新建vue项目 vue create 项目名 然后选最下面那一个(键盘上下键操作)然后回车 选择Bable,Router,Vuex,Css-Processords四个,其他的不要选中(空格键是选中和取消选中) 剩下的步骤按这张图来进行选择,然后项目就创建

  • Vue使用Swiper封装轮播图组件的方法详解

    目录 Swiper 为什么要封装组件 开始封装 1.下载安装Swiper 2.引入css样式文件 3.引入js文件 4.把官网使用方法中的HTML结构复制粘贴过来 5.初始化Swiper 自定义效果 完整代码 效果展示 Swiper Swiper是一个很常用的用于实现各种滑动效果的插件,PC端和移动端都能很好的适配. 官网地址:www.swiper.com.cn/ 目前最新版本是Swiper7,但众所周知最新版本通常不稳定,所以这里使用Swiper6来封装. Swiper各版本区别: 为什么要封

  • vue3.x使用swiperUI动态加载图片失败的解决方法

    本文实例为大家分享了vue3.x使用swiperUI动态加载图片失败的具体解决方法,供大家参考,具体内容如下 版本号: vue/cli:4.5.12swiper:^6.8.4 问题 1.动态加载图片,但是动态加载图片为空,需要显示默认图片时使用v-if失效 <div class="swiper-container home_swiper">     <div class="swiper-wrapper" v-if="aImages.len

  • vue3.x使用swiper实现卡片轮播

    本文实例为大家分享了vue3.x使用swiper实现卡片轮播的具体代码,供大家参考,具体内容如下 版本号: vue/cli:4.5.12swiper:^6.8.4 安装 npm install --save swiper 使用以及配置 <div class="swiper-container home_swiper">     <div class="swiper-wrapper">         <div class="s

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

    目录 使用swiper的时候第二轮事件不会触发 解决这种有两种方法 swiper点击事件无效的问题 现象 分析 原因 解决方法 使用swiper的时候第二轮事件不会触发 首先说明导致这样的结果的原因:官方解释是轮播在循环轮播的时候他是前面复制一份后面复制一份,这样看起来就是无缝滚动,但是在复制的时候不会复制事件,所以会有事件不会触发 解决这种有两种方法 第一种loop为false,这样没有复制元素自然也不存在复制事件这一说法 第二种重新写options 第一步定义ref跟重新定义options

  • Vue封装Swiper实现图片轮播效果

    图片轮播是前端中经常需要实现的一个功能.最近学习Vue.js,就针对Swiper进行封装,实现一个简单的图片轮播组件. 一.Swiper 在实现封装之前,先介绍一下Swiper. Swiper是纯Javascript打造的滑动特效插件,面向手机.平板电脑等移动终端. Swiper能实现触屏焦点图.触屏Tab切换.触屏多图切换等常用效果. Swiper开源.免费.稳定.使用简单.功能强大,是架构移动终端网站的重要选择. Swiper的应用场景广泛,实现效果很好,下面个这实际案例就是Swiper的典

  • vue使用swiper实现中间大两边小的轮播图效果

    项目中使用的vue,刚好有需求要实现轮播图,突出显示当前图片,两边展示其他图片:通过查各种资料,实现了,故在此记录下来 下面我们来看下实现步骤: 第一步:首先在项目index.html中引入swiper的css文件- swiper.min.css 第二部:写入dom结构 <div class="swiper-container"> <div class="swiper-wrapper"> <div v-for="(item,

  • 解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题

    Vue使用swiper插件时特别是轮播元素含有动态数据时可能会出现数据为空或者白屏的问题 使用下面的方法可以解决(保证在数据请求之后再渲染页面) 页面结构 <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide tpOne" v-if="topInfo"> <-- 此处为绑

  • vue使用swiper.js重叠轮播组建样式

    本文实例为大家分享了vue使用swiper.js重叠轮播组建样式,供大家参考,具体内容如下 <template> <div class="article-main"> <div class="article-content"> <swiper class="swiper" :options="swiperOption"> <swiper-slide class="

  • vue使用swiper插件实现轮播图的示例

    hello大家好,最近我在做一个仿饿了么的项目,我会将我的项目经验同步到这里,与大家分享! vue - 使用swiper插件实现轮播图 下载安装: npm install swiper --save Msite.vue的HTML部分: <!--在页面msite_nav导航部分使用swiper--> <div class="swiper-container"> <div class="swiper-wrapper"> <div

  • vue封装swiper代码实例解析

    这篇文章主要介绍了vue封装swiper代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 data(){ return{ list:[], swiperOption:"", xiding : "", // 轮播高度 SwiperHeight:'' } }, mounted(){ this.onload() // 获取轮播图图片的高度 setTimeout(()=> { // 通过ref获取轮播dom

  • 分享vue里swiper的一些坑

    实例: 错误(无法显示出分页器按钮,此功能不适用与for循环出来的图片,只有当该页面图片固定几张时能正常用) 第一步: 安装  npm i swiper (vue插件自带) 第二步: 在当前页面里引入 import Swiper from 'swiper'; import 'swiper/dist/css/swiper.min.css'; 第三步:当然呐,或许你在想内容呐,别急,为了大家的方便内容的写法我也会提供 <html代码> <div class="swiper-cont

  • vue awesome swiper异步加载数据出现的bug问题

    本人第一次使用vue awesome. 踩到的坑确实不少.官网上面的用法写的很简单,按照上面做法基本会遇到如下这个问题 轮播第二次之后,首屏会自动跳过 网上找了很多资料,都不能解决这个问题.于是自己琢磨了很久终于灵光一闪.一个小技巧解决了这个问题. 使用方法应该很简单,去官网可以查看到方法.基本步骤如下 npm install vue-awesome-swiper --save-dev 在main.js中 import VueAwesomeSwiper from 'vue-awesome-swi

随机推荐