項目中須要用到switch這個開關組件,可是又不想用過重量級的組件庫了,加載量太大,不必,因此本身定製了一個,借鑑了一下we-ui的樣式。很簡單的幾行代碼,你們能夠本身修改樣式。vue
PS:有些東西光靠想可能以爲比較複雜,但真正去作了,仍是不難。測試
我仍是習慣分2步走,首先須要在一個獨立頁面把組件和樣式都調好,一切OK了,再封裝成組件。ui
1、 第一步組件調試的效果,看這裏:https://jsfiddle.net/50wL7mdz...this
2、 第二步封裝成組件調用。就2個vue文件,組件vue+測試調用的vue,完整的代碼以下:spa
一、組件代碼(請自行放置到本身項目中對應的位置)
<template> <div> <span class="weui-switch" :class="{'weui-switch-on' : me_checked}" :value="value" @click="toggle"></span> </div> </template> <script> export default { props: { value: { type: Boolean, default: true } }, data() { return { me_checked: this.value } }, watch: { me_checked(val) { this.$emit('input', val); } }, methods: { toggle() { this.me_checked = !this.me_checked; } } } </script> <style> .weui-switch { display: block; position: relative; width: 52px; height: 32px; border: 1px solid #DFDFDF; outline: 0; border-radius: 16px; box-sizing: border-box; background-color: #DFDFDF; transition: background-color 0.1s, border 0.1s; cursor: pointer; } .weui-switch:before { content: " "; position: absolute; top: 0; left: 0; width: 50px; height: 30px; border-radius: 15px; background-color: #FDFDFD; transition: transform 0.35s cubic-bezier(0.45, 1, 0.4, 1); } .weui-switch:after { content: " "; position: absolute; top: 0; left: 0; width: 30px; height: 30px; border-radius: 15px; background-color: #FFFFFF; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); transition: transform 0.35s cubic-bezier(0.4, 0.4, 0.25, 1.35); } .weui-switch-on { border-color: #1AAD19; background-color: #1AAD19; } .weui-switch-on:before { border-color: #1AAD19; background-color: #1AAD19; } .weui-switch-on:after { transform: translateX(20px); } </style>
二、 調用的代碼
<template> <div> <my_switch v-model="value1"></my_switch> <button @click="show">查看值</button> </div> </template> <script> import my_switch from "./my_switch"; //這裏引入上一個文件(目錄本身定) export default { components: { my_switch }, data() { return { value1: false //組件的初始狀態 } }, methods: { show() { alert(this.value1); } } } </script>
但願對你們有用。.net