VUE-AWESOME-SWIPER loop true時候點擊無效解決方案


1. 解決:數據預警 swiper輪播點擊失效
3. 核心:點擊事件綁定在swiper里面,而不是在vue template div上面。因為swiper在looptrue的時候會多復制2個假的,點擊會無效。
通過在swiper上綁點擊,通過let index = vm.clickedIndex - vm.activeIndex + vm.realIndex;拿到真的index,將復制的2個index處理
4. 代碼:
swiperOption: {
        slidesPerView: 5,
        speed: 3000,
        loop: true,
        observer: true// 修改swiper自己或子元素時,自動初始化swiper
        observeParents: true// 修改swiper的父元素時,自動初始化swiper
        clicks: {
          preventClicksPropagation: false,
        },
        direction: "vertical",
        autoplay: {
          autoplay: true,
          delay: 1000,
          disableOnInteraction: false,
        },
        on: {
          click: function () {
            // 這里有坑,需要注意的是:this 指向的是 swpier 實例,而不是當前的 vue, 因此借助 vm,來調用 methods 里的方法
            console.log(this);
            // console.log(this.$children[0].data.id); // click改為箭頭函數可以this就變成vue可以通過vue獲取id
            // let id = this.$children[0].data.id;
            vm.handleClickSlide(this);
            // vm.showDetail(id);
          },
        },
      },


 handleClickSlide(vm) {
      // 注意這樣拿到的是真的list里面的index, 但looptrue的時候,會多復制2個index,需要手動變下,才可以實現和list的index完全對應
      // 在swiper里注冊點擊事件,loop true復制的2個假的才可以被點擊上,所以點擊事件不寫在vuetemplate的div上面
      // 關鍵詞: swiper loop true點擊失效
      let index = vm.clickedIndex - vm.activeIndex + vm.realIndex;
      if (index === this.list.length) {
        index = 0;
      } else if (index === this.list.length +1) {
        index = 1;
      } else if (index === this.list.length +2) {
        index = 2;
      }
      // 我得到的index就是點擊的item在實際數組中的下標index
      console.log(index);
      // console.log(this.list[index].id);
      // 后面可以根據得到的index判斷跳到每個對應的路由this.$router.push({path: `/single`});
      this.showDetail(this.list[index].id);
    },

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM