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 }
总结:
- 不能盲目瞎抄,不注意自己版本和网上方法里版本差异
- 不要放弃,遇事沉着冷静,顺着vue报错的提示去看看node_modules看下插件包里的路径,可能有用处