vue.js开发之开关(switch)组件
最近开发组件的时候,自定义开发了开关(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)组件的更多相关文章
- 用Vue.js开发微信小程序:开源框架mpvue解析
前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...
- 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发
每天记录一点:NetCore获得配置文件 appsettings.json 用NetCore做项目如果用EF ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...
- MPVUE - 使用vue.js开发微信小程序
MPVUE - 使用vue.js开发微信小程序 什么是mpvue? mpvue 是美团点评前端团队开源的一款使用 Vue.js 开发微信小程序的前端框架.框架提供了完整的 Vue.js 开发体验,开发 ...
- Vue.js 桌面端自定义滚动条组件|vue美化滚动条VScroll
基于vue.js开发的小巧PC端自定义滚动条组件VScroll. 前段时间有给大家分享一个vue桌面端弹框组件,今天再分享最近开发的一个vue pc端自定义滚动条组件. vscroll 一款基于vue ...
- vue.js入门(3)——组件通信
5.2 组件通信 尽管子组件可以用this.$parent访问它的父组件及其父链上任意的实例,不过子组件应当避免直接依赖父组件的数据,尽量显式地使用 props 传递数据.另外,在子组件中修改父组件的 ...
- windows下vue.js开发环境搭建教程
这篇文章主要为大家详细介绍了windows下vue.js开发环境搭建教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中 ...
- 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+
什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...
- electron-vue:Vue.js 开发 Electron 桌面应用
相信很多同学都知道 Electron 可以帮助开发人员使用前端技术开发桌面客户端应用,今天介绍的 electron-vue 框架是一套基于 Vue.js 开发 Electron 桌面应用的脚手架,该项 ...
- Vue.js随笔一(Webpack + Vue.js开发准备,含VNM、NPM、Node、Webpack等相关工具)
想入门工具是必须的,这一章将向大家带来vue.js相关的程序安装步骤. ①首先你需要有一个NVM(一个非常好用的Node版本管理器): 1.NVM下载地址:https://github.com/cor ...
随机推荐
- 忘记Oracle用户名和密码
方法一: 看看是不是Oracle服务器没有打开 打开cmd,输入sqlplus /nolog,回车---->进入sqlplus; 输入“conn /as sysdba”:以超级管理员的方式连接数 ...
- OCP换考题了,052新考题及答案整理-第17题
17.Which two statements are true about tablespaces? A) A database can contain multiple undo tablespa ...
- windows kvm虚拟机安装
这一步操作需要注意的几个点:a.局域网内与主机传输文件用scp或ftp命令,要保证ISO镜像文件在主机上有操作权限的目录下,比如 /home等:b.不管安装什么系统的虚拟机,创建的磁盘类型,分配的虚拟 ...
- Heap堆
#pragma once#include<iostream>using namespace std;#include<vector> template<class T&g ...
- [Swift]扩展String类:extension String
请参考本博客另一篇技术博文: <[Swift]字符串(String类.NSString类)常用操作> extension String { //获取字符串首字符 var first: St ...
- 快速上手日期插件laydate
1.laydate 这款插件有独立版的,也有作为layui模块的,两种使用方式差不多,就引入有区别而已 <!--这是作为模块使用--><!DOCTYPE html> <h ...
- MySQL中optimize的作用
MySQL执行命令delete语句时,如果包括where条件,并不会真正的把数据从表中删除,而是将数据转换成了碎片,通过下面的命令可以查看表中的碎片数量和索引等信息: mysql > show ...
- 高阶篇:4.1.2)QFDII(设计要求逐层分配给各零件)
本章目的:明确QFDII的作用:输入为设计要求(Design Feature),输出为零件特征(Part Characteristic),将设计要求分配到每一个零件特征中去: 本章开始介绍产品结构设计 ...
- Educational Codeforces Round 58 (Rated for Div. 2)
A. Minimum Integer 水 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using name ...
- Serical Port
QextSerialPort 虽然这次不用写串口,但今后可能要用到的三方类库. 这个帖子下面普及了串口的概念.VC++模块的部分