Vue使用Swiper看这一篇就够了

此案例实现需求

  • 完成swiper动态异步数据下的slide渲染
  • 自定义分页器样式
  • 解决loop:true设置时的事件丢失问题
  • swiper鼠标移入/移出 暂停/开始轮播
  • 单页面渲染多个swiper组件互不影响

1、引入swiper

npm i swiper@5.2.0

2、创建轮播图组件CarouselContainer.vue,详细解析在代码注释中

<template><div class="CarouselContainer" @mouseenter="stopAutoPlay" @mouseleave="startAutoPlay"><div ref="mySwiper" class="swiper-container" :id="currentIndex"  ><div class="swiper-wrapper"><div class="swiper-slide my-swiper-slide" v-for="(item,index) of slideList" :key="index">{{item.name}}</div></div><!-- 分页器 --><div class="swiper-pagination"></div><!--导航器--><div class="swiper-button-prev"></div><div class="swiper-button-next"></div></div></div>
</template>
<script>
import Swiper from 'swiper'
import "swiper/css/swiper.css";
export default {name: 'CarouselContainer',props: ['slideList','currentIndex'],data(){return {currentSwiper:null,}},watch:{//slide数据发生变化时,更新swiperslideList:{deep:true,// eslint-disable-next-linehandler(nv,ov){console.log("数据更新了")this.updateSwiper()}}},mounted() {this.initSwiper()},methods:{//鼠标移入暂停自动播放stopAutoPlay() {this.currentSwiper.autoplay.stop()},//鼠标移出开始自动播放startAutoPlay() {this.currentSwiper.autoplay.start()},//初始化swiperinitSwiper(){// eslint-disable-next-linelet vueComponent=this//获取vue组件实例//一个页面有多个swiper实例时,为了不互相影响,绑定容器用不同值或变量绑定this.currentSwiper = new Swiper('#'+this.currentIndex, {loop: true, // 循环模式选项autoHeight:'true',//开启自适应高度,容器高度由slide高度决定//分页器pagination: {el: '.swiper-pagination',clickable:true,//分页器按钮可点击},on: {//此处this为swiper实例//切换结束获取slide真实下标slideChangeTransitionEnd: function(){console.log(vueComponent.$props.currentIndex+"号swiper实例真实下标",this.realIndex)},//绑定点击事件,解决loop:true时事件丢失// eslint-disable-next-lineclick: function(event){console.log("你点击了"+vueComponent.$props.currentIndex+"号swiper组件")}},//导航器navigation: {nextEl: '.swiper-button-next',prevEl: '.swiper-button-prev',},autoplay: {//自动播放,不同版本配置方式不同delay: 3000,stopOnLastSlide: false,disableOnInteraction: false},slidesPerView: 1, //视口展示slide数1slidesPerGroup: 1, //slide数1页一组})},//销毁swiperdestroySwiper(){try {this.currentSwiper.destroy(true,false)}catch (e) {console.log("删除轮播")}},//更新swiperupdateSwiper(){this.destroySwiper()this.$nextTick(()=>{this.initSwiper()})},},destroyed() {this.destroySwiper()}
}
</script>
<style scoped>.CarouselContainer{background-color: gray;}/*slide样式*/.my-swiper-slide{height: 300px;background-color: pink;}/*swiper容器样式*/.swiper-container {width: 700px;border: 1px solid red;}/*自定义分页器按钮被点击选中时的样式*//deep/.swiper-pagination-bullet-active{background-color: #d5a72f !important;width: 20px;}/*自定义分页器按钮常规样式*//deep/.swiper-pagination-bullet{background-color: #9624bf;opacity: 1;width: 20px;}
</style>

3、创建父组件App.vue渲染多个swiper组件、模拟异步数据变化

<template><div id="app"><!--传递不同的currentIndex 作为区分不同swiper组件的动态id--><CarouselContainer :slide-list="list" currentIndex="1"></CarouselContainer><CarouselContainer :slide-list="list" currentIndex="2"></CarouselContainer></div>
</template>
<script>
import CarouselContainer from './components/CarouselContainer.vue'
export default {name: 'App',components: {CarouselContainer,},data(){return{list:[{name:"aaa"},{name:"bbb"},{name:"ccc"},]}},mounted() {let self=this//延时模拟两次数据变化setTimeout(()=>{let obj={name:"ddd"}self.list.push(obj)},5000)setTimeout(()=>{let obj={name:"eee"}self.list[0].name="AAA"self.list.push(obj)},8000)}
}
</script>
<style scoped>
</style>

只需要这两个文件就可以vue项目中运行demo查看效果了

Vue使用Swiper看这一篇就够了相关推荐

  1. api网关选型_如何轻松打造百亿流量API网关?看这一篇就够了(下)

    如何轻松打造百亿流量API网关?看这一篇就够了(上) 上篇整体描述了网关的背景,涉及职能.分类.定位环节,本篇进入本文的重点,将会具体谈下百亿级流量API网关的演进过程. 准备好瓜子花生小板凳开始积累 ...

  2. python装饰器功能是冒泡排序怎么做_传说中Python最难理解的点|看这完篇就够了(装饰器)...

    https://mp.weixin.qq.com/s/B6pEZLrayqzJfMtLqiAfpQ 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主要是 ...

  3. serviceloader java_【java编程】ServiceLoader使用看这一篇就够了

    转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...

  4. docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  5. mysql ip比较大小_MySQL优化/面试,看这一篇就够了

    原文链接:http://www.zhenganwen.top/articles/2018/12/25/1565048860202.html 作者:Anwen~ 链接:https://www.nowco ...

  6. 基础 | 零散的MySql基础记不住,看这一篇就够啦

    ❝ 这是小小本周的第二篇,本篇将会着重的讲解关于MySql基础的内容,MySql基础看这一篇就够啦. ❞ 送书反馈与继续送书 之情小微信公众号第一次送书,Java深度调试技术,书已经被中奖者麦洛签收, ...

  7. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,看完这篇就够了,论软件架构设计的重要性、本篇论文“未通过考试”,供分析参考

    [系统架构设计师]软考高级职称,一次通过,倾尽所有,看完这篇就够了,学习方法和技巧这里全都有. 论软件架构设计的重要性.本篇论文未通过考试(不合格),供分析参考. 目录 摘要 正文 结尾 摘要 201 ...

  8. 深度好文:云网络丢包故障定位,看这一篇就够了~

    深度好文:云网络丢包故障定位,看这一篇就够了~ https://mp.weixin.qq.com/s/-Q1AkxUr9xzGKwUMV-FQhQ Alex 高效运维 今天 来源:本文经授权转自公众号 ...

  9. 代理后台中间件_Golang Gin 实战(十三)| 中间件详解看这一篇就够了

    6000字大章带你死磕Golang Gin中间件 在Gin的整个实现中,中间件可谓是Gin的精髓.一个个中间件组成一条中间件链,对HTTP Request请求进行拦截处理,实现了代码的解耦和分离,并且 ...

最新文章

  1. 白话经典算法系列之六 高速排序 高速搞定
  2. 小黑小波比.Ubuntu下的截图
  3. 附录:更多集合操作命令
  4. 漫步微积分二十七——曲线下的面积 定积分 黎曼
  5. HDU 4348 To the moon
  6. php 输出mysql_php如何输出mysql查询结果
  7. reduceByKey与GroupByKey,为什么尽量少用GroupByKey
  8. java dom获取命名空间属性_Java DOM XML解析::获取元素属性值
  9. 锐捷客户端在linux下的校园网认证
  10. 网络下载器 迅雷大众版 v7.9.42.5050 精简绿色版
  11. oracle数据库基础笔试题,Oracle数据库入门笔试试题及参考答案
  12. 怎么才可以使用 IPX 协议???
  13. 红色警戒2:尤里的复仇 中文绿色版
  14. facebook登陆授权 服务器接入记录
  15. Android中控件设置英文文本内容时区分大小写
  16. E4A(易安卓)学习——第一个APP
  17. 洛谷入门篇的相关题解
  18. html 整体缩小zoom,页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
  19. 卫生部拟规定就业入学等常规体检不再查乙肝
  20. 80老翁谈人生(202):王选成就的历史还原

热门文章

  1. android夜间模式监控
  2. 使用node加密excel文件
  3. centos7上先要关闭httpd服务之后再卸载,反正卸载之后就是安装不上一脸懵逼
  4. Facebook、Twitter、LinkedIn分享按钮总结
  5. Windows 下的 Vim 编程
  6. MiniGUI移植过程
  7. 清橙OJ 1082 查找第K小元素 -- 快速排序
  8. NLP自然语言处理CRF详解
  9. Lesson 18 Kaggle医学影像识别 PART 1
  10. FortiGate常用命令