效果:
HTML:
<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(26px, 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>
JS:
<script>
export default {
name: "toggleSwitch",
props: {
value: { type: Boolean, default: true },
speed: { type: Number, default: 100 },
present: { type: Object, default: {}},
id: { default: '' },
index: { default: '' },
open: { type: String, default: '开' },
close: { type: String, default: '关' },
openBgColor: { type: String, default: '#409EFF'},
closeBgcolor: {type: String, default: '#DCDFE6'}
},
data() {
return {
toggled: this.value,
colorChecked: this.openBgColor,
colorUnchecked: this.closeBgcolor,
labelChecked: this.open,
labelUnchecked: this.close
};
},
methods: {
toggle(event) {
this.toggled = !this.toggled;
this.$emit("change", {bool: this.toggled, index: this.present.$index, id: this.present.row.id});
}
},
created() {}
};
</script>
CSS:
<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: 5px;
line-height: 25px;
border-radius: 100px;
}
&.label-right {
right: 5px;
line-height: 25px;
border-radius: 100px;
}
}
.switch-core {
display: block;
position: relative;
box-sizing: border-box;
outline: 0;
margin: 0;
transition: border-color 0.3s, background-color 0.3s;
user-select: none;
width: 50px;
height: 25px;
border-radius: 100px;
line-height: 25px;
.switch-button {
width: 20px;
height: 20px;
display: block;
position: absolute;
overflow: hidden;
top: 3px;
left: 2px;
z-index: 3;
transform: translate3d(0, 0, 0);
background-color: #fff;
border-radius: 100px;
}
}
}
</style>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。