前言
switch
组件是一个很常用的基础组件,如下图所示:
下面我们来一起开发一个自定义的 switch
组件吧
分析
因为 switch
组件是一个开关组件,它的可操作状态就和 checkbox 一样,所以,我们可以基于 <input type="checkbox">
标签为基础,对它进行改造封装
实现
组件逻辑代码
我们可以在 switch
组件上创建双向数据绑定, 当用户触发 input
元素的输入事件时,自动更新到 switch
的数据
注意:内部的
input
元素的数据也是双向绑定
大致操作流程如下所示:
- 在 computed 的 get 中 给
currentValue
赋初值 - 当用户触发 input 的
chang
事件时,input 元素自动更新数据,也就是下文的currentValue
变量, 同时发送一个自定义的change
事件,停供给外界使用 - 当
currentValue
发生变化时,会触发它setter
方法,我们在 computed 的 set 中 发射默认的input
事件 - 在父组件中 用 v-model 自动接收上一步 发射事件的值,更新
switch
组件选择状态
具体代码如下所示:
1 | <template> |
组件样式代码
1 | .switch |
上述代码有以下几点需要注意的地方:
1: 设置 -webkit-appearance: none
去除 input 的原始外观
2: 通过 before 和 after 伪元素 构造 switch的动画元素
3: 通过 input:checked
选择器控制当选中时, before 和 after 的变化,配合 transition
形成点击的动画效果
DEMO展示
点击下方链接查看 👇:
http://wechat.hand-china.com/hippius-ui/#/zh-CN/switch