解决使用vue-awesome-swiper组件手动滚动点击失效问题

 更新时间:2023年06月30日 09:48:17   作者:Skywang  
这篇文章主要介绍了使用vue-awesome-swiper组件手动滚动点击失效问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

问题

最近做了一个项目用了vue-awesome-swiper这个组件,遇到了一个问题。

就是vue引入swiper后,使用loop循环,然后给每个swiper-slide滑块绑定事件@click='fn()' ,由于是循环模式,swiper会复制两份swiper-slide滑块做循环的效果,但是这两份复制的滑块点击效果无效,其它的正常。

废话不多说 上代码

问题代码

这是把点击事件绑定在dom上

在 loop 开启的时候,dom 绑定事件是有问题的。因为在loop模式下slides前后会复制若干个slide,从而形成一个环路,但是却不会复制绑定在dom上的click事件。

因此只能使用 swiper 提供的 api 方法进行解决

解决方案

html

js

<script>
    import {
        swiper,
        swiperSlide
    } from "vue-awesome-swiper";
    var vm = null;
    export default {
        data() {
            return {
                swiperOption: {
                    notNextTick: true,
                    //循环
                    loop: true,
                    //设定初始化时slide的索引
                    initialSlide: 0,
                    //自动播放
                    autoplay: true,
                    autoplay: {
                        delay: 3000,
                        stopOnLastSlide: false,
                        disableOnInteraction: false,
                    },
                    // 设置轮播
                    effect: '',
                    //滑动速度
                    speed: 800,
                    //滑动方向
                    direction: 'horizontal',
                    //小手掌抓取滑动
                    // grabCursor : true,
                    //滑动之后回调函数
                    on: {
                        slideChangeTransitionEnd: function() {
                            console.log(this.activeIndex);
                            //切换结束时,告诉我现在是第几个slide
                            //                             const realIndex = this.activeIndex;
                            //                             vm.carousel(realIndex);
                        },
                        click: function() {
                          // 这里有坑,需要注意的是:this 指向的是 swpier 实例,而不是当前的 vue, 因此借助 vm,来调用 methods 里的方法 
                          // console.log(this); // -> Swiper
                          // 当前活动块的索引,与activeIndex不同的是,在loop模式下不会将 复制的块 的数量计算在内。
                            console.log('ss'+this.realIndex)
                            const realIndex = this.realIndex;
                            vm.carousel(vm.carousels[realIndex]);
                        }
                    },
                    //左右点击
                    //                  navigation: {
                    //                      nextEl: '.swiper-button-next',
                    //                      prevEl: '.swiper-button-prev',
                    //                  },
                    //分页器设置         
                    pagination: {
                        el: '.swiper-pagination',
                        clickable: true
                    }
                },
                swiperSlides: [1, 2, 3, 4],
                activeIndex: 0,
                carousels:[]
            }
        },
        components: {
            swiper,
            swiperSlide
        },
        computed: {
            swiper() {
                return this.$refs.mySwiper.swiper;
            }
        },
        created() {
            vm = this;
        },
        methods: {
            carousel(type) {
                if (type.url !== null) {
                    this.$router.push(type.redirect_to);
                } 
            }
        }
    }

如上图js里定义一个全局的变量vm,为了在swiper的AIP中调用vue的方法和绑定的数据, 这时候就可以解决点击事件失效的问题了!

以上就是解决使用vue-awesome-swiper组件手动滚动点击失效问题的详细内容,更多关于vue-awesome-swiper滚动点击的资料请关注脚本之家其它相关文章!

相关文章

  • vue2.0结合Element实现select动态控制input禁用实例

    vue2.0结合Element实现select动态控制input禁用实例

    本篇文章主要介绍了vue2.0结合Element实现select动态控制input禁用实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • vue3实现局部页面刷新效果的示例详解

    vue3实现局部页面刷新效果的示例详解

    这篇文章主要为大家详细介绍了vue3如何采用 App.vue定义全局变量与方法并实现局部页面刷新效果,文中的示例代码讲解详细,需要的可以参考一下
    2024-01-01
  • vue-devtools安装使用全过程

    vue-devtools安装使用全过程

    这篇文章主要介绍了vue-devtools安装使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 用vue写一个仿简书的轮播图的示例代码

    用vue写一个仿简书的轮播图的示例代码

    本篇文章主要介绍了用vue写一个仿简书的轮播图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • uniapp中easycom用法实例详解

    uniapp中easycom用法实例详解

    easycom是Uniapp框架中非常方便的组件自动注册机制,可以大大简化组件的使用和管理,这篇文章主要介绍了uniapp中easycom用法详解,需要的朋友可以参考下
    2023-03-03
  • vue调取电脑摄像头实现拍照功能

    vue调取电脑摄像头实现拍照功能

    这篇文章主要为大家详细介绍了vue调取电脑摄像头实现拍照功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Vuex模块化编码使用详解

    Vuex模块化编码使用详解

    本文介绍了 Vuex 的模块化和命名空间功能,通过对 store.js 进行模块划分,提高代码维护性和数据分类的明确性,并讲解了在组件中读取和操作模块化 state、getters、actions、mutations 的具体方法
    2025-10-10
  • Pycharm中开发vue element项目时eslint的安装和使用步骤

    Pycharm中开发vue element项目时eslint的安装和使用步骤

    这篇文章主要介绍了Pycharm中开发vue element项目时eslint的安装和使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • vue 页面刷新、重置、更新页面所有数据的示例代码

    vue 页面刷新、重置、更新页面所有数据的示例代码

    Vue.js提供了多种方式来实现页面刷新、重置和更新页面所有数据的功能,下面通过示例代码演示vue 页面刷新、重置、更新页面所有数据,感兴趣的朋友跟随小编一起看看吧
    2024-01-01
  • Vue+Element-ui日历排班自定义实例代码

    Vue+Element-ui日历排班自定义实例代码

    这篇文章主要给大家介绍了关于Vue+Element-ui日历排班自定义的相关资料,有现成的日历插件但是不符合需求,所以项目中使用vue+element的表格组件自己实现一个日历组件,需要的朋友可以参考下
    2023-09-09

最新评论