vue项目中使用vue-awesome-swiper趟坑之路

需求场景:
在项目中vant满足不了一些比较好看的轮播需求,比如:
vue项目中使用vue-awesome-swiper趟坑之路
vnat自带的swiper场景比较单一,就这样的展示形式:
vue项目中使用vue-awesome-swiper趟坑之路
目前网上对于vue-awesome-swiper的使用方法各种坑,还被剩下的那几条头发嫌弃,大多数问题在于要么就是版本对不上,要么就是swiper.css import地址不对,要么就是swiper-pagination不显示,要么自动轮播失效……然后就各种bai度。

下面说一下亲测的正确使用方法:

安装

安装目前来说的比较稳定的版本 3.1.3,不建议安装4或以上的版本,到时候泪满坑都不一定能爬出来,哈哈哈

//直接安装即可,会自动安装3.1.3版本,并自带swiper3.4.2版本
npm i vue-awesome-swiper@3 -S

vue项目中使用vue-awesome-swiper趟坑之路

引入

<局部引入>

注意swiper, swiperSlide的格式,首字母是小写的。

<script>
import { swiper, swiperSlide } from 'vue-awesome-swiper'
import 'swiper/dist/css/swiper.css'
export default {
  components: {
    swiper,
    swiperSlide
  }
}
</script>

<全局引入>
main.js

import Vue from 'vue'
import VueAwesomeSwiper from 'vue-awesome-swiper'
//样式
import 'swiper/css/swiper.css'
//使用插件
Vue.use(VueAwesomeSwiper)

页面结构

<template>
  <div class="example-3d">
  //展示当前轮播的页数位置
      {{ days }}
    <swiper class="swiper" :options="swiperOption" ref="mySwiper">
      <swiper-slide v-for="(item, index) in srcs" :key="index">
        <div class="aaa" :style="`{backgroundImage:url('${item}')}`"></div>
      </swiper-slide>
      //轮播焦点
      <div
        style="display: none"
        class="swiper-pagination"
        slot="pagination"
      ></div>
    </swiper>
  </div>
</template>
<script>
import { swiper, swiperSlide } from 'vue-awesome-swiper'
import 'swiper/dist/css/swiper.css'

export default {
  props: ['signData'],
  components: {
    swiper,
    swiperSlide
  },
data() {
    let vm = this
    return {
      days: '一',
      srcs: [
        'xxx/bg_sy.png',
        'xxx/bg_sy.png',
        'xxx/bg_sy.png',
        'xxx/bg_sy.png',
        'xxx/bg_sy.png',
        'xxx/bg_sy.png',
        'xxx/bg_sy.png'
      ],
      active: 1,
      atime: 0,
      //配置swiper相关属性
      swiperOption: {
        effect: 'coverflow',
        grabCursor: true,
        centeredSlides: true,
        slidesPerView: 'auto',
        coverflowEffect: {
          rotate: 50,		//slide做3d旋转时Y轴的旋转角度
          stretch: 0,		//每个slide之间的拉伸值,越大slide靠得越紧
          depth: 100,		//slide的位置深度。值越大z轴距离越远,看起来越小。
          modifier: 1,		//depth和rotate和stretch的倍率,相当于depth*modifier、rotate*modifier、stretch*modifier,值越大这三个参数的效果越明显。
          slideShadows: false	//是否开启slide阴影
        },
        loop: true,
        pagination: {
          el: '.swiper-pagination'
        },
        on: {
        //slideChangeTransitionEnd
        //回调函数,swiper从一个slide过渡到另一个slide结束时执行。
          slideChangeTransitionEnd: function () {
          //activeIndex在不使用loop属性情况下使用可得准确的索引值
          // var sum = this.swiper.activeIndex
           console.log("当前是第几个slide:",this.realIndex)
            
            //使用loop属性下获得的索引值
            var sum = this.realIndex
            switch (sum) {
              case 0:
                vm.days = '一'
                break
              case 1:
                vm.days = '二'
                break
              case 2:
                vm.days = '三'
                break
              case 3:
                vm.days = '四'
                break
              case 4:
                vm.days = '五'
                break
              case 5:
                vm.days = '六'
                break
              case 6:
                vm.days = '七'
                break
            }
          }
        }
      }
    }
  },
}
</script>

 <style lang="scss" scoped>
.example-3d {
  width: 100%;
  height: 340px;
  padding-top: 50px;
  padding-bottom: 90px;
  text-align: center;
}
.aaa {
  width: 100%;
  height: 100%;
  background-repeat: no-repeat;
  background-size: 100% auto;
}
.swiper {
  height: 100%;
  width: 100%;

  .swiper-slide {
    display: flex;
    justify-content: center;
    align-items: center;
    // 3:4
    width: 240px;
    height: 320px;
    text-align: center;
    font-weight: bold;
    font-size: 12px;
    background-color: #2c8dfb;
    background-position: center;
    background-size: cover;
    color: #fff;
  }
  .swiper-slide img {
    height: auto;
    width: 100%;
  }
}

</style>

我们难免会在swiper里面根据当前滑动改变后改一些data里面的数据,这时候改变数据的动作是在事件 on:{} 里面来完成,但是在on里面会出现一个this指向的问题:
如果用function(){}来实现的话,要修改data里面的数据用this.xxx是错误的,因为此时this的指向是swiper,要修改data里面的数据就得在return外面定义一个 vm:

 data() {
    let vm = this
    return {
    days: '一',
     swiperOption: {
        effect: 'coverflow',
        grabCursor: true,
        centeredSlides: true,
        slidesPerView: 'auto',
        coverflowEffect: {
          rotate: 50,
          stretch: 0,
          depth: 100,
          modifier: 1,
          slideShadows: false
        },
        loop: true,
        pagination: {
          el: '.swiper-pagination'
        },
        on: {
          slideChangeTransitionEnd: function () {
          //this指向swiper
          var sum = this.realIndex
            switch (sum) {
              case 0:
              //vm指向vue对象
                vm.days = '一'
                break
              case 1:
                vm.days = '二'
                break
                //省略相关代码……
          }
        }
	  }
	}
 }

这样子就能在你想要的触发事件里面更新data里面的变量了
swiper返回当前活动块(激活块)的索引
swiper相关事件
swiper切换效果
vue-awesome-swiper的官方示例

趟坑之路皆头发,为了日后方便查阅仅此记录,如有错漏请指出,让我们一起进步!感谢

上一篇:L1-030 一帮一 (15 分)python


下一篇:Markdown 学习