vue2详细使用Swiper,看完就懂少踩坑

11,164 阅读3分钟

简单了解 Swiper

Swiper是纯javascript打造的滑动特效插件,面向手机、平板电脑等移动终端。

Swiper能实现触屏焦点图、触屏Tab切换、触屏轮播图切换等常用效果。

Swiper开源、免费、稳定、使用简单、功能强大,是架构移动终端网站的重要选择!

效果

直接上效果 11 (1).gif

Vue2安装 Swiper

NPM

1、npm i vue-awesome-swiper@3.1.3 -S

注意:为什么不用4.1.1?

:vue-awesome-swiper v4.1.1版 autoplay、effect等无效问题至今未解决

一些报错

Module not found: Error: Can't resolve 'swiper/dist/css/swiper.css' in ...
Module not found: Error: Can't resolve 'swiper/swiper-bundle.css' in ...

这些都是因为版本的问题而报的错

建议一开始就安装vue-awesome-swiper 3.1.3版,安装对应的swiper版本

然后全部按照3.1.3版本的文档来使用即可。*

引入

全局引入

main.js

import VueAwesomeSwiper from 'vue-awesome-swiper' 
import 'swiper/dist/css/swiper.css' 
Vue.use(VueAwesomeSwiper) 

单独引入

import 'swiper/dist/css/swiper.css'
// 注意下边引入的swiper和swiperSlide第一个字母s都是小写的,大写会报错
import { swiper, swiperSlide } from 'vue-awesome-swiper'

template 使用

     <swiper :options="swiperOption" ref="mySwiper">
        <swiper-slide v-for="(item, index) in mdv" :key="index">
          <img :src="item.photo" alt="" />
          <div class="banner-inner">
            <div class="banner-inner-box">
              <div class="title-box">{{ item.title }}</div>
              <div class="content-box">{{ item.introduction }}</div>
              <div class="toSeeDetail" @click="toSeeDetail(item)">
                <el-button class="toSeeDetail" type="primary">点击查看</el-button>
              </div>
            </div>
          </div>
        </swiper-slide>
        <!-- 根据情况引入控件 -->
        // 底部按钮
        <div class="swiper-pagination" slot="pagination"></div>
        // 上一张按钮
        <div class="swiper-button-prev" slot="button-prev"></div>
        // 下一张按钮
        <div class="swiper-button-next" slot="button-next"></div> 
      </swiper>

Script 使用

export default {
    data(){
        return{
           swiperOption: {
               spaceBetween: 15, // 图片之间的间距
               centeredSlides: true, // 居中还是从图1开始
               slidesPerView: 'auto', // 一屏幕显示几个? 数字或者默认  auto 自动。
               notNextTick: true, // true:加载后允许触发事件 false:加载后不可以触发事件
            // loop: true, // 循环吗
               initialSlide: 0, // 从第几个开始
               autoplay: {
               delay: 5000, // 等5秒下一个
               disableOnInteraction: false // 中间滑动一下,取消自动吗?
             },
               pagination: {
               el: '.swiper-pagination',
               clickable: true
             }, // 下按钮
               speed: 800, // 滑动时候动画的速度
               paginationClickable: true, // 下面按钮让点吗
               navigation: {
              prevEl: '.swiper-button-prev', // 左侧按钮
              nextEl: '.swiper-button-next' // 右侧按钮
             },
             effect: 'fade', // 渐入效果
             watchSlidesProgress: true, // 开启这个参数来计算每个slide的progress
             watchSlidesVisibility: true  // 先要开启watchSlidesProgress参数,如果开启watchSlidesVisibility,则会在每个slide增加一个指示该slide的progress值得classname
            // autoHeight: true  // 图片高度自适应
      },
      mdv:[], // 存放图片数据的数组
        }
}

写到这里,轮播图就基本呈现出来了。如果我们想要一个比较有画面冲击感的视觉效果,可以适当加入一些css3动画。

CSS 使用

**下面我写一段css的代码来实现我想要的效果

** 重点:

watchSlidesProgress: true,watchSlidesVisibility: true 一定要开启,因为会在每个slide增加一个指示该slide的progress值得classname,我们就可以在当前轮播的类下面加入我们想要实现的图片transform: scale(1)效果

@keyframes blurFadeIn {
  0% {
    opacity: 0;
  }
  50% {
    opacity: 0.5;
  }

  100% {
    opacity: 1;
  }
}

.swiper-slide {
  width: 100%;
  height: 579px;
  img {
    width: 100%;
    // height: 100%;
    min-height: 310px;
    transform: scale(1);
    transition: ease all 1.8s;
    object-fit: cover;
  }
}
.swiper-slide-visible {
  img {
    transform: scale(1.2);
    transition: ease all 1.8s;
  }
  .banner-inner {
    .title-box {
      color: #333333;
      font-weight: 600;
      font-size: 36px;
      margin-top: 125px;
      margin-bottom: 23px;
      animation: blurFadeIn 0.4s backwards;
      animation-delay: 0.8s;
    }
    .content-box {
      color: #666666;
      font-size: 24px;
      margin-bottom: 45px;
      animation: blurFadeIn 0.6s backwards;
      animation-delay: 1s;
    }
    .toSeeDetail {
      width: 152px;
      font-size: 16px;
      height: 40px;
      animation: blurFadeIn 0.8s backwards;
      animation-delay: 1.2s;
    }
  }
}
.swiper-slide-active {
  height: auto;
}

.swiper-pagination-fraction,
.swiper-pagination-custom,
.swiper-container-horizontal > .swiper-pagination-bullets {
  bottom: 115px;
  left: 0;
  width: 100%;
}

总结

vue2中不能使用最新版本的Swiper,因此,插件包版本一定要下载正确,不然会报一堆找不到包的错误。这也是我在项目中,自己研究出来的一种方案,如果有更好的方案欢迎在评论区留言,一起探讨哈。