vue swiper 爬坑记录

vue swiper 爬坑记录 

 转载: https://blog.csdn.net/u012570307/article/details/107203851/   
             完整的照着坑踩了一遍

 

按照图中的方法,原计划5分钟搞定,一顿操作猛如虎,然后vue各种报错,然后再各种百度,结果开始了2天的爬坑之旅
在这里插入图片描述
坑1
按照上图安装方法,npm将安装最新的vue-awesome-swiper(@4),对应的是swiper6,但是国内暂时没有swiper6的文档,意味着没法参考使用方法,有问题也不好去网上找

坑2
最新版vue-awesome-swiper的安装姿势是这样子滴:

npm install swiper vue-awesome-swiper --save

对比vue-awesome-swiper版本3

npm install vue-awesome-swiper --save-dev

没有孙猴子的火眼金睛,你很可能忽略swiper(蝴蝶效应,引起后续一系列坑)

坑3
划重点:这是网上大伙查找的最多的坑,搞了很久没解决,有可能会导致小伙伴们暴躁易怒,哈哈

安装完之后,你又在某度上查找使用方法,网友一般建议你这样使用

import { swiper, swiperSlide } from "vue-awesome-swiper";
import "swiper/dist/css/swiper.css";
export default {
  components: {
    swiper,
    swiperSlide
  },
  data() {
    return {
      swiperOption: {
        loop: true,
        autoplay: {
          delay: 3000,
          stopOnLastSlide: false,
          disableOnInteraction: false
        },
        // 显示分页
        pagination: {
          el: ".swiper-pagination",
          clickable: true //允许分页点击跳转
        },
        // 设置点击箭头
        navigation: {
          nextEl: ".swiper-button-next",
          prevEl: ".swiper-button-prev"
        }
      }
    };
  },
....

然后你的vue就使劲跟你报错,说找不到swiper.css,然后你又继续某度,无限坑。。。
或者你去看了一下路径,再去node_modules找swiper,发现没有swiper这货。那就安装个swiper呗

npm install swiper --save

但是,你没有带版本,npm默认给你装的是swiper6,文件夹里的路径跟swiper4都不一样啦兄弟们。

这才是问题的根源,加入你没找到问题的核心,继续某度的话,估计还没好几天辛苦滴爬坑。

 

正确的使用姿势:

安装(指定版本)

npm install vue-awesome-swiper@3 --save-dev

组件中使用

这里我贴出在页面中简单使用方法(先跑起来),小伙伴们可以完全复制粘贴,复杂的东西我都简化掉了。 版本: vue@2.5.2,vue-awesome-swiper@3.1.3

<template>
  <div class="recommendPage">
    <swiper :options="swiperOption" ref="mySwiper">
      <swiper-slide>I'm Slide 1</swiper-slide>
      <swiper-slide>I'm Slide 2</swiper-slide>
      <swiper-slide>I'm Slide 3</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>
  </div>
</template>

<script>
// 引入插件
import { swiper, swiperSlide } from "vue-awesome-swiper";
import "swiper/dist/css/swiper.css";

export default {
  components: {
    swiper,
    swiperSlide
  },
  data() {
    return {
      swiperOption: {
        loop: true,
        autoplay: {
          delay: 3000,
          stopOnLastSlide: false,
          disableOnInteraction: false
        },
        // 显示分页
        pagination: {
          el: ".swiper-pagination",
          clickable: true //允许分页点击跳转
        },
        // 设置点击箭头
        navigation: {
          nextEl: ".swiper-button-next",
          prevEl: ".swiper-button-prev"
        }
      }
    };
  },
  computed: {
    swiper() {
      return this.$refs.mySwiper.swiper;
    }
  },
  mounted() {
    // current swiper instance
    // 然后你就可以使用当前上下文内的swiper对象去做你想做的事了
    console.log("this is current swiper instance object", this.swiper);
    // this.swiper.slideTo(3, 1000, false);
  }
};
</script>
<style scoped >
.recommendPage .swiper-container{
  position: relative;
  width: 100%;
  height: 200px;
  background: pink;
}  
.recommendPage .swiper-container .swiper-slide{
  width: 100%;
  line-height: 200px;
  background: yellowgreen;
  color: #000;
  font-size: 16px;
  text-align: center;
}
</style>

事件监听: on

  切换之后效果, 使用 onSlideChangeEnd(page切换后触发) 会偶尔不触发, 请使用 onTransitionEnd(过度效果结束触发) 

swiperOption: {
                    loop: true,
                    slidesPerView: 2,
                    spaceBetween: 0,
                    effect: "coverflow",
                    grabCursor: true,
                    centeredSlides: true,
                    autoHeight: false,
                    coverflowEffect: {
                        rotate: -60,
                        stretch: 30,
                        depth: 100,
                        modifier: 1,
                        slideShadows: true,
                    },
                    on: {
                        tap: function (e) {
                        // let ind = this.realIndex;
                            let ind = this.clickedSlide.dataset.swiperSlideIndex;
                            window.open(getPathUrl(that.video_list[ind]));
                        },
                        transitionEnd: function() {
                            console.log(this.realIndex);
                            that.activeIndex = this.realIndex;
                        }
                    },
                    observer: true,
                    observeSlideChildren: true
                }

 

 

总结:

  1. 不能盲目瞎抄,不注意自己版本和网上方法里版本差异
  2. 不要放弃,遇事沉着冷静,顺着vue报错的提示去看看node_modules看下插件包里的路径,可能有用处
posted on 2020-07-28 19:52  梦幻飞雪  阅读(1771)  评论(1编辑  收藏  举报