vue-awesome-swiper 自定义分页器

2020-05-06  本文已影响0人  阿畅_

自定义分页器

  <div class="slide-wrapper">
    <div class="slide_web" v-swiper:swiper="swiperOption2">
      <div class="swiper-wrapper">
        <div class="swiper-slide" v-for="(slide, k) in userSlideList" :key="k">
          <img :src="slide.img"/>
        </div>
      </div>
    </div>
    <div class="swiper-pagination" slot="pagination" id="custom">
    </div>
  </div>
data() {
 const vm = this
  return {
    swiperOption2: {
      effect: 'coverflow',
      loop: true,
      autoplay: {
        delay: 3000,
        disableOnInteraction: false,
      },
      loopedSlides: 1,
      slidesPerView: 1,
      centeredSlides: true,
      coverflowEffect: {
        rotate: 0,
        depth: 20,
        slideShadows : false
      },
      pagination: {
        el: '.swiper-pagination',
        type: 'custom',
        clickable: true, // 自定义分页加了这个 没效果
        renderCustom: function (swiper, current, total) { // 这里因为 this 作用域的关系,不能直接使用 this 获取 Vue 相关内容,通过上面的 const vm = this,使用 vm 获取
          const _html = '';
          for (let i = 1; i <= total; i++) {
            if (current == i) {
              _html += `<div class="swiper-pagination-custom-item">
                <div class="image-wrap active" index="${i}">
                  <img class="custom-img" index="${i}" src="${vm.thumbsList[i - 1].img}" alt="">
                </div>
                <span>${vm.thumbsList[i - 1].text}</span>
              </div>`
            } else {
              _html += `<div class="swiper-pagination-custom-item">
                <div class="image-wrap" index="${i}">
                  <img class="custom-img" index="${i}" src="${vm.thumbsList[i - 1].img}" alt="">
                </div>
                <span>${vm.thumbsList[i - 1].text}</span>
              </div>`
            }
          }
          return _html
        }
      }
    },
  }
}

自定义点击事件

mounted() {
  this.customBox = document.getElementById('custom')
  this.customBox.addEventListener('click', this.handleClick, false)
},

methods: {
  handleClick(e) {
    // 获取目标元素,拿到目标元素上的 index 值
    const current = e.target
    const toCount = current.attributes["index"].value || ''
    // 跳转到指定的 swiper 页面
    if (toCount) {
      this.swiper.slideTo(toCount)
    }
  }
},

destroyed() {
  this.customBox.removeEventListener('click', this.handleClick, false)
}

多个 swiper 联动效果

<div class="swiper-container">
  <div class="slide_web slide-title-wrap" v-swiper:swiper="swiperOption1">
    <div class="swiper-wrapper">
      <div class="swiper-slide swiper-no-swiping" v-for="(slide, k) in textList" :key="k">
        <div class="title">{{slide.title}}</div>
        <span class="subtitle">{{slide.subtitle}}</span>
      </div>
    </div>
  </div>
  <div class="slide-wrapper">
    <div class="slide_web" v-swiper:swiperTop="swiperOption2">
      <div class="swiper-wrapper">
        <div class="swiper-slide" v-for="(slide, k) in userSlideList" :key="k">
          <img :src="slide.img"/>
        </div>
      </div>
    </div>
    <div class="swiper-pagination" slot="pagination" id="custom">
    </div>
  </div>
</div>
  mounted() {
    this.$nextTick(() => {
      const swiper1 = this.swiper
      const swiper2 = this.swiperTop
      swiper2.controller.control = swiper1
      swiper1.controller.control = swiper2
    })
  }

上一篇 下一篇

猜你喜欢

热点阅读