Vue封装Swiper实现图片轮播效果


Posted in Javascript onFebruary 06, 2018

图片轮播是前端中经常需要实现的一个功能。最近学习Vue.js,就针对Swiper进行封装,实现一个简单的图片轮播组件。

一、Swiper

在实现封装之前,先介绍一下Swiper。

  • Swiper是纯Javascript打造的滑动特效插件,面向手机、平板电脑等移动终端。
  • Swiper能实现触屏焦点图、触屏Tab切换、触屏多图切换等常用效果。
  • Swiper开源、免费、稳定、使用简单、功能强大,是架构移动终端网站的重要选择。

Swiper的应用场景广泛,实现效果很好,下面个这实际案例就是Swiper的典型应用场景。

Vue封装Swiper实现图片轮播效果 

Swiper的具体使用教程及详细API,参考 Swiper中文网

二、Vue组件

Vue组件设计初衷就是要配合使用的,提高维护性和复用性。而图片轮播正适合使用组件来完成,因此在介绍具体的实现之前,先介绍下关于Vue组件及组件通信。

Vue组件中最常见的就是形成父子组件的关系:组件 A 在它的模板中使用了组件 B。

它们之间必然需要相互通信:父组件可能要给子组件下发数据,子组件则可能要将它内部发生的事情告知父组件。然而,通过一个良好定义的接口来尽可能将父子组件解耦也是很重要的。这保证了每个组件的代码可以在相对隔离的环境中书写和理解,从而提高了其可维护性和复用性。

在 Vue 中,父子组件的关系可以总结为 prop 向下传递,事件向上传递。父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息。

Vue封装Swiper实现图片轮播效果 

三、封装实现

1.引入Swiper

首先,需要安装Swiper。

npm install --save swiper

然后,要引用两个文件。

import Swiper from "swiper";
import "swiper/dist/css/swiper.min.css";

2.HTML代码

在模板中设置轮播图的html布局。

<template>
 <div class="swiper-container" :class="swipeid">
  <div class="swiper-wrapper">
   <!-- 存放具体的轮播内容 -->
   <slot name ="swiper-con"></slot>
  </div>
  <!-- 分页器 -->
  <div :class="{'swiper-pagination':pagination}"></div>
 </div>
</template>

其中使用具名插槽,提高解耦,使得在父组件使用时,根据不同情况,设置不同的轮播内容。

另外需要设置分页器,即图片轮播中的页面指示器,常见的如小圆点,或者数字指示器。

3.初始化Swiper

既然是对Swiper进行封装实现轮播图,前面也已经安装了Swiper,那么现在就需要初始化使用。

在初始化之前,根据Swiper用法的了解,先确定轮播组件需要的属性信息,然后通过父组件传递给封装的Swiper组件。

这时候就需要用到props。

props: {
 swipeid: {
  type: String,
  default: ""
 },
 effect: {
  type: String,
  default: "slide"
 },
 loop: {
  type: Boolean,
  default: false
 },
 direction: {
  type: String,
  default: "horizontal"
 },
 pagination: {
  type: Boolean,
  default: true
 },
 paginationType: {
  type: String,
  default: "bullets"
 },
 autoPlay: {
  type: Number,
  default: 3000
 }
 }

下面逐一解释每个属性的含义。

属性 含义
swiped 轮播容器class属性的类名。
effect 图片的 切换效果,默认为"slide",还可设置为"fade", "cube", "coverflow","flip",详情见effect。
loop 设置为true 则开启loop模式。loop模式:会在原本图片前后复制若干个图片并在合适的时候切换,让Swiper看起来是循环的,详情见loop。
direction 图片的滑动方向,可设置水平(horizontal)或垂直(vertical),详情见direction。
pagination 使用分页导航,详情见pagination。
paginationType 分页器样式类型,可设置为"bullets", "fraction", "progressbar", "custom",详情见type。
autoPlay 设置为true启动自动切换,并使用默认的切换设置,详情见autoplay。

了解了上面每个属性的含义,下面就可以初始化Swiper,并设置具体的属性。

初始化Swiper时,需要传入两个参数。

  • 轮播容器的类名
  • 代表图片轮播组件详细功能的对象
var that = this;
 this.dom = new Swiper("." + that.swipeid, {
  //循环
  loop: that.loop,
  //分页器
  pagination: { 
  el: ".swiper-pagination",
  bulletClass : 'swiper-pagination-bullet',
   },
  //分页类型
  paginationType: that.paginationType,
  //自动播放
  autoPlay: that.autoPlay,
  //方向
  direction: that.direction,
  //特效
  effect: that.effect,
  //用户操作swiper之后,不禁止autoplay
  disableOnInteraction: false,
  //修改swiper自己或子元素时,自动初始化swiper
  observer: true,
  //修改swiper的父元素时,自动初始化swiper
  observeParents: true
 });
 }

四、自定义轮播效果

经过上面的步骤,轮播器就封装好了。我们可以自定义实现自己想要的轮播器效果。下面以知乎的API为例,实现图片轮播。

1.HTML代码

<m-swipe swipeid="swipe" ref="swiper" :autoPlay="3000" effect="slide">
  <div v-for="top in tops" :key="top.id" class="swiper-slide" slot="swiper-con" >
  <img :src="top.image">
  <h3>{{top.title}}</h3>
  </div>
</m-swipe>

首先要引用注册组件,这里就不详细写出。

其中 m-swipe 就是前面实现的图片轮播组件,而其中的子组件就是通过具名插槽插入的轮播内容。

2.CSS代码

.swiper-container {
 width: 100%;
 }
 .swiper-slide {
 height: 8rem;
 overflow: hidden;
 position: relative;
 }
.swiper-slide {
 div {
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
 opacity: 0.4;
 position: absolute;
 background-color: @blue;
 }
 img {
 top: 50%;
 position: relative;
 transform: translate(0, -50%);
 }
 h3 {
 width: 70%;
 color: #fff;
 margin: 0;
 font-size: 0.5rem;
 line-height: 1rem;
 right: 5%;
 bottom: 2.6rem;
 text-align: right;
 position: absolute;
 text-shadow: 1px 1px 10px rgba(0, 0, 0, 0.5);
 &:before {
  content: "";
  width: 3rem;
  bottom: -0.6rem;
  right: 0;
  display: block;
  position: absolute;
  border: 2px solid @yellow;
 }
 }
}
.swiper-pagination-bullet-active {
 background: #fff;
}
.swiper-container-horizontal > .swiper-pagination-bullets {
 bottom: 1rem;
 width: 95%;
 text-align: right;
 }

其中 swiper-pagination-bullet-active 代表分页器中当前指示的小圆点的类名。 .swiper-pagination-bullets 代表分页器的类名,详情见pagination分页器内元素的类名 。

关于网络请求数据展示的代码就不贴了,下面有源码地址。

3.效果

Vue封装Swiper实现图片轮播效果 

这只是一个简单的封装效果,想要实现更多的效果,可以通过Swiper中提供的更多功能来实现。

Github地址: 图片轮播

总结

以上所述是小编给大家介绍的Vue封装Swiper实现图片轮播效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
鼠标经过的文本框textbox变色
May 21 Javascript
JQuery 选择和过滤方法代码总结
Nov 19 Javascript
用js实现控件的隐藏及style.visibility的使用
Jun 14 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
Nov 30 Javascript
js实现对ajax请求面向对象的封装
Jan 08 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
Nov 10 Javascript
网页中右键功能的实现方法之contextMenu的使用
Feb 20 Javascript
javascript DOM的详解及实例代码
Mar 06 Javascript
详解Vue2.0里过滤器容易踩到的坑
Jun 01 Javascript
利用JS实现scroll自定义滚动效果详解
Oct 17 Javascript
vue.js在标签属性中插入变量参数的方法
Mar 06 Javascript
JS关于刷新页面的相关总结
May 09 Javascript
vue中如何使用ztree
Feb 06 #Javascript
javascript回调函数详解
Feb 06 #Javascript
原生JS实现瀑布流插件
Feb 06 #Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
Feb 06 #Javascript
20行JS代码实现粘贴板复制功能
Feb 06 #Javascript
JS中offset和匀速动画详解
Feb 06 #Javascript
Bootstrap实现的表格合并单元格示例
Feb 06 #Javascript
You might like
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
javascript的几种写法总结
2016/09/30 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
python操作MongoDB基础知识
2013/11/01 Python
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
python学习入门细节知识点
2018/03/29 Python
tensorflow如何批量读取图片
2019/08/29 Python
Python编写打字训练小程序
2019/09/26 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
意大利团购网站:Groupon意大利
2016/10/11 全球购物
购房意向书范本
2014/04/01 职场文书
中学生寄语大全
2014/04/03 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python
python数字图像处理之图像的批量处理
2022/06/28 Python