最近开发组件的时候,自定义开发了开关(switch)组件,现将代码整理如下,方便日后复用。

toggle-switch.vue  
<template>
<label role="checkbox" :class="['switch', { toggled }]">
<input type="checkbox"
class="switch-input"
@change="toggle"/>
<div class="switch-core"
:style="{backgroundColor: toggled ? colorChecked : colorUnchecked}">
<div class="switch-button"
:style="{transition: `transform ${speed}ms`,
transform: toggled ? null: `translate3d(32px, 0px, 0px)`}">
</div>
</div>
<span class="switch-label label-right"
v-if="toggled"
v-html="labelChecked">
</span>
<span class="switch-label label-left"
v-html="labelUnchecked" v-else>
</span>
</label> </template> <script>
export default {
name: 'ToggleSwitch',
data () {
return {
toggled: this.value,
colorChecked: '#25b9e9',
colorUnchecked: '#db572e',
labelChecked: '开',
labelUnchecked: '关'
}
},
props: {
value: {
type: Boolean,
default: true
},
speed: {
type: Number,
default: 100
}
},
methods: {
toggle (event) {
this.toggled = !this.toggled
this.$emit('change', event)
}
}
}
</script> <style lang="scss" scoped> .switch {
display: inline-block;
position: relative;
overflow: hidden;
vertical-align: middle;
user-select: none;
font-size: 10px;
cursor: pointer; .switch-input {
display: none;
} .switch-label {
position: absolute;
top: 0;
font-weight: 600;
color: white; z-index: 2; &.label-left {
left: 10px;
line-height: 20px;
border-top-left-radius: 2px;
border-bottom-left-radius:2px;
} &.label-right {
right: 10px;
line-height: 20px;
border-top-right-radius: 2px;
border-bottom-right-radius:2px;
}
} .switch-core {
display: block;
position: relative;
box-sizing: border-box;
outline: 0;
margin: 0;
transition: border-color .3s, background-color .3s;
user-select: none;
width: 64px;
height: 20px;
border-radius: 4px;
line-height: 20px; .switch-button {
width: 32px;
height: 20px;
display: block;
position: absolute;
overflow: hidden;
top: 0;
left: 0;
z-index: 3;
transform: translate3d(0, 0, 0);
background-color: #ecf0f5;
}
}
}
</style>
App.vue
<template>
<div id="app">
<div class="left">
<toggle-switch></toggle-switch>
</div>
<div class="main">
<router-view></router-view>
</div>
</div>
</template> <script>
import ToggleSwitch from '@/components/toggle-switch'
export default {
name: 'app',
components: {
ToggleSwitch
}
}
</script> <style>
#app {
font-family: 'Microsoft YaHei','Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: left;
color: #2c3e50;
height:100%;
} .left {
margin: 50px 200px;
}
.main{
float:left;
width:95%;
background-color: #EFF2F7;
height:100%;
overflow: auto; }
</style>

  

vue.js开发之开关(switch)组件的更多相关文章

  1. 用Vue.js开发微信小程序:开源框架mpvue解析

    前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...

  2. 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发

    每天记录一点:NetCore获得配置文件 appsettings.json   用NetCore做项目如果用EF  ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...

  3. MPVUE - 使用vue.js开发微信小程序

    MPVUE - 使用vue.js开发微信小程序 什么是mpvue? mpvue 是美团点评前端团队开源的一款使用 Vue.js 开发微信小程序的前端框架.框架提供了完整的 Vue.js 开发体验,开发 ...

  4. Vue.js 桌面端自定义滚动条组件|vue美化滚动条VScroll

    基于vue.js开发的小巧PC端自定义滚动条组件VScroll. 前段时间有给大家分享一个vue桌面端弹框组件,今天再分享最近开发的一个vue pc端自定义滚动条组件. vscroll 一款基于vue ...

  5. vue.js入门(3)——组件通信

    5.2 组件通信 尽管子组件可以用this.$parent访问它的父组件及其父链上任意的实例,不过子组件应当避免直接依赖父组件的数据,尽量显式地使用 props 传递数据.另外,在子组件中修改父组件的 ...

  6. windows下vue.js开发环境搭建教程

    这篇文章主要为大家详细介绍了windows下vue.js开发环境搭建教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中 ...

  7. 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+

    什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...

  8. electron-vue:Vue.js 开发 Electron 桌面应用

    相信很多同学都知道 Electron 可以帮助开发人员使用前端技术开发桌面客户端应用,今天介绍的 electron-vue 框架是一套基于 Vue.js 开发 Electron 桌面应用的脚手架,该项 ...

  9. Vue.js随笔一(Webpack + Vue.js开发准备,含VNM、NPM、Node、Webpack等相关工具)

    想入门工具是必须的,这一章将向大家带来vue.js相关的程序安装步骤. ①首先你需要有一个NVM(一个非常好用的Node版本管理器): 1.NVM下载地址:https://github.com/cor ...

随机推荐

  1. mycat 1.6.6.1安装以及配置docker 安装mysql 5.7.24 双主多从读写分离主主切换

    mycat和mysql的高可用参考如下两个图 简介:应用程序仅需要连接HAproxy或者mycat,后端服务器的读写分离由mycat进行控制,后端服务器数据的同步由MySQL主从同步进行控制. 服务器 ...

  2. LVM 认知与扩容操作

    继上次 "Linux系统如何迁移至LVM磁盘"反响不错,近三百的访问量吧.这次想续写点东西,主要讲的是"LVM认知和扩容操作".因为网上大多数不准确,可能作者也 ...

  3. Python实现——二层BP神经网络

    2019/4/23更新 下文中的正确率极高是建立在仅有50组训练数据的基础上的,十分不可靠.建议使用提供的另一个生成训练集的generate_all函数,能产生所有可能结果,更加可靠. 2019/4/ ...

  4. iOS 之NSOperation(一)

    一.NSOperation的介绍 1.NSOperation的作用 配合使用NSOperation和NSOperationQueue实现多线程编程 2.实现多线程的具体步骤 1)将需要执行的操作封装到 ...

  5. 重载<<运算符第二个参数必须加上const

    如题,在重载<<时不停的报错,说找不到匹配的函数,仔细观察和书上的样例对比后发现,我的第二个参数缺少了一个const,抱着试一试的心态,因为平时也没注意const这个东西,也不经常用,试了 ...

  6. POJO和Javabean的区别:

    pojo:存粹java类,不继承,不实现.(不受限制的java类),多用于指数据库的映射对象javaBean:可复用组件,由容器(tomcat)创建,因此应具有无参构造器,不能跨进程访问,通常要无方法 ...

  7. 动手玩转Docker(一)

    在学习docker之前,先了解一下什么是docker,以及docker技术存在的意义. Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上 ...

  8. C语言编译器和IDE的选择

    什么是编译器: CPU只认识几百个二进制形式的指令,C语言对CPU而言简直就是天书.C语言是用固定的词汇与格式组织起来,简单直观,程序员容易识别和理解. 这时候就需要一个工具,将C语言代码转换成CPU ...

  9. 强制css属性生效

    今天在写一个隐藏滚动条的css时,设置的overflow-x: hidden; overflow-y: scroll;属性死活不生效, 在谷歌浏览器中查看,发现这两条属性是被划掉的.如图. 这表明别处 ...

  10. 【Alpha】Scrum Meeting 0&1

    前言 第0次会议和第1次会议分别在4月1日和4月2日21:00由PM在大运村一公寓3层召开. 第0次时长50min,主要明确了接下来的任务,对工作进行了分配. 第1次会议时长20min,调研了当日工作 ...