首先新建项目vue init webpack projectName

安装依赖包npm i这些就不说了

接下来就是构建我们的swiper组件

因为我写的代码不规范, 通不过eslint的检测, 会频繁报警告, 所以不愿意看警告的可以打开\build\webpack.base.conf.js的32行到41行注释掉

接下来才开始正式的构建组件

我直接把脚手架工具\src\components\HelloWorld.vue下的HelloWorld组件修改为Swiper, 然后把ruter\router的HelloWorld都修改成Swiper

  • src\router\index.js
import Vue from 'vue'
import Router from 'vue-router'
import Swiper from '@/components/Swiper' Vue.use(Router) export default new Router({
routes: [
{
path: '/',
name: 'Swiper',
component: Swiper
}
]
})
  • \src\components\Swiper.vue
<template>
<div class="hello">
<p>测试</p>
</div>
</template> <script>
export default {
name: 'Swiper',
data () {
return { }
}
}
</script> <!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped> </style>

npm run dev之后看到这样页面就是创建成功, 可以开始

  • swiper的基本样式(凑合可以看)
<template>
<div class="hello">
<div class="swiper">
<img :src="imgArr[0].src" alt="" >
// 绑定的属性一定要用v-bind指令 : 是简写
<div>
<p>{{imgArr[0].title}}</p>
<span>&lt;</span>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<span>&gt;</span>
</div>
</div>
</div>
</template>
  • JS部分
<script>
export default {
name: 'Swiper',
props: {
imgArr: {
// 接受一个数组类型imgArr参数, 默认值是空数组
type: Array,
default: []
}
},
data () {
return { }
}
}
</script>
  • app.vue代码
<template>
<div id="app">
<Swiper :imgArr="imgArr"></Swiper>
// 把imgArr传递给swipr组件
</div>
</template>
  • js部分
<script>
import Swiper from './components/Swiper.vue'
// 引用swiper组件
export default {
name: 'app',
components : {
Swiper
// 声明使用Swiper组件
},
data() {
return {
imgArr: [
{
src:require("./images/1.jpg"), // js中引用图片路径一定要用require关键字, html和css部分不需要
title: '1.jpg'
},
{
src:require("./images/2.jpg"),
title: '2.jpg'
},
{
src:require("./images/3.jpg"),
title: '3.jpg'
},
{
src:require("./images/4.jpg"),
title: '4.jpg'
},
]
}
}
}
</script>

现在的页面应该是

接下来我们该去写切换逻辑部分

  • 首先是把图片标号改成图片数组的长度, 不能写死

    我们修改swiper.vue内的代码

  • 接下来是点击编号跳转到相应的图片, 通过switchImg函数进行跳转

    函数就是修改当前组件的currentNum, 达到显示哪一张图片

<template>
<div class="hello">
<div class="swiper">
<img :src="imgArr[currentNum].src" alt="" > <div>
<p>{{imgArr[currentNum].title}}</p>
<span>&lt;</span>
<ul>
<li v-for="(item, index) in imgArr">
<a @click="switchImg(index)" href="javascripe:;">{{ index + 1 }}</a>
</li>
</ul>
<span>&gt;</span>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'Swiper',
props: {
imgArr: {
type: Array,
default: []
}
},
data () {
return {
currentNum:0
}
},
methods: {
switchImg(index) {
this.currentNum = index;
}
}
}
</script>
  • 接下来就是左右切换按钮跳转, 我们使用vue的计算属性特性
computed: {
nextNum() {
if (this.currentNum === 0) {
return this.imgArr.length-1
} else {
return this.currentNum - 1
}
},
preNum() {
if (this.currentNum === this.imgArr.length-1) {
return 0
} else {
return this.currentNum + 1
}
}
}

只需上一页下一页的按钮添加同样的事件, 把以上两个计算属性传入函数即可

 <span @click="switchImg(nextNum)"><a href="javascripe:;">&lt;</a></span>
<ul>
<li @click="switchImg(index)" v-for="(item, index) in imgArr">
<a href="javascripe:;">{{ index + 1 }}</a>
</li>
</ul>
<span @click="switchImg(preNum)"><a href="javascripe:;">&gt;</a></span>
  • 接下来就是加入定时切换的功能, 我们只需要添加一个定时器即可, 再组件构建完毕就开始执行
 interval() {
this.inv = setInterval(() => {
this.switchImg(this.preNum);
},this.time)
}

再添加一个传入的参数, 默认值是1000(1秒)


time: {
type: Number,
default: 1000
}

再组件初始化完毕后开始执行

  created() {
this.interval();
}
  • 再一个功能就是, 再移入的时候清空计数器, 移除之后再重启计时器
	// 清除定时器
clearTime() {
clearInterval(this.inv)
},
// 重启定时器
setTime() {
this.interval();
}

再最外层的div加上两个出发函数

<div class="hello" @mouseover="clearTime" @mouseout="setTime">
  • 最后一个功能就是, 是否自动播放

    加入一个可传入参数autoPlay
autoPlay: {
type: Boolean,
default: true
}

然后处理一下刚才定义好的重启定时器和初始化完毕钩子函数

setTime() {
if(this.autoPlay) {
this.interval();
}
}
created() {
if(this.autoPlay) {
this.interval();
}
}

此时一个简单的swiper组件就构建完毕, 可传入一个图片地址数组, 一个自动播放事件, 是否自动播放三个参数

项目地址

从头开始开发一个vue幻灯片组件的更多相关文章

  1. vue-concise-slider 一个轻量的vue幻灯片组件

    vue-concise-slider 一个轻量的vue幻灯片组件 阅读 541 收藏 35 2017-07-03 原文链接:github.com 外卖订单处理有烦恼?试试美团点评餐饮开放平台吧,可实现 ...

  2. 如何从0开发一个Vue组件库并发布到npm

    1.新建文件夹在终端打开执行 npm init -y 生成package.json如下,注意如果要发布到npm,name不能有下划线,大写字母等 { "name": "v ...

  3. 如何抽象一个 Vue 公共组件

    之前一直想写一篇关于抽象 Vue 组件的随笔,无奈一直没想到好的例子.恰巧最近为公司项目做了一个数字键盘的组件,于是就以这个为例聊聊如何抽象 Vue 的组件. 先上 Demo 与 源码.(demo最好 ...

  4. 从零开始开发一个vue组件打包并发布到npm (把vue组件打包成一个可以直接引用的js文件)

    自己写的组件 有的也挺好的,为了方便以后用自己再用或者给别人用,把组件打包发布到npm是最好不过了,本次打包支持 支持正常的组件调用方式,也支持Vue.use, 也可以直接引用打包好的js文件, 配合 ...

  5. 从0到1发布一个Vue Collapse组件

    需求背景 最近在项目中遇到了一个类似Collapse的交互需求,因此到github上找了一圈关于Vue Collapse的相关轮子,但是多少都有些问题.有的是实现问题,例如vue2-collapse, ...

  6. 自己开发的 vue 滑动按钮组件 vue-better-slider

    写在前面的 这个人第一次尝试开发并发布一个 vue 的组件,该组件实现了类似 ios 手机淘宝客户端 -> 消息界面中消息的滑动删除功能等,如下为该组件的文档. 一个 Vue 的滑动按钮组件,有 ...

  7. 如何开发和发布一个Vue插件

    前言 Vue 项目开发过程中,经常用到插件,比如原生插件 vue-router.vuex,还有 element-ui 提供的 notify.message 等等.这些插件让我们的开发变得更简单更高效. ...

  8. 一个vue的日历组件

    说明: 1.基于element-ui开发的vue日历组件. 地址 更新: 1.增加value-format指定返回值的格式2.增加头部插槽自定义头部 <ele-calendar > < ...

  9. java+springBoot+Thymeleaf+vue分页组件的定义

    导读 本篇着重介绍java开发环境下,如何写一个vue分页组件,使用到的技术点有java.springBoot.Thymeleaf等: 分页效果图 名称为vuepagerbasic的分页组件,只包含上 ...

随机推荐

  1. 利用AddressBook.framework框架获取iOS系统通讯录数据

    此方法是使用AddressBook.framework框架获取通讯录信息 第一步.在info.plist文件里面配置访问权限 第二步.导入头文件 #import <AddressBook/Add ...

  2. Window 相关命令

    net user Administrator /Active:Yes NET USER 用于创建和修改计算机上的用户帐户.当不带选项使用本命令时,它会列出计算机上的用户帐户.用户帐户的信息存储在用户帐 ...

  3. 全文搜索 ElasticSearch

    今天突然想了解一下ES,看看有什么优势,能不能用在项目中. 说到ES就不得不了解它的底层技术-全文检索 Ref: 全文检索的基本原理 https://blog.csdn.net/wangmaohong ...

  4. 应用安全 - Web安全 - 逻辑漏洞整理

    短信轰炸 .Fiddler抓包repeat .burpsuite 修改 PHPSESSID ->字典爆破 如选择a-z .burpsuite手机号遍历 防御: 设置图片验证码,每次获取短信验证码 ...

  5. 进程之间的通讯Queue简单应用

    #进程间通讯--Queue #Process有时需要通信的,操作系统提供了很多机制来实现进程之间的通讯 #而Queue就是其中一个 #1.Queue的使用 #可以使用multiprocessing模块 ...

  6. 前端最常用的跨域方式--jsonp

    jsonp通过动态创建script标签的方式来实现跨域通信.原理是浏览器允许html标签在不同的域名下加载资源. <script> var script = document.create ...

  7. Spring Boot静态资源

    1.4 SpringBoot静态资源 1.4.1 默认静态资源映射 Spring Boot 对静态资源映射提供了默认配置 Spring Boot 默认将 /** 所有访问映射到以下目录: classp ...

  8. go 结构体取代类

    我们知道go的结构体有点类的感觉,可以有自己的属性和方法. 但是由于结构体的属性都是有零值的,我们在创建结构体的时候并不需要设置这些属性的值就能创建,但是这样创建的结构体往往没有什么实用价值. 我们可 ...

  9. project euler-34

    145是个奇怪的数字.由于1!+ 4! + 5! = 1 + 24 + 120 = 145. 请求出能表示成其每位数的阶乘的和的全部数的和. 请注意:由于1! = 1和2! = 2不是和,故它们并不包 ...

  10. JavaScript代码内部执行顺序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...