07- Vue3 UI Framework - Switch 组件
为了更好的提升用户体验,我们这里再做一个很常用的开关组件
switch
返回阅读列表点击 这里
需求分析
开始之前我们先做一个简单的需求分析
switch
组件应分为选中/未被选中,两种状态- 可以通过点击变更选中状态
- 不同的选中状态有不同的颜色,且有滑块处于不同的端
- 可以指定不同的尺寸
- 可以自定义颜色
- 可以设置为禁用
那么可以整理出以下参数表格
参数 | 含义 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
value | 默认选择状态 | boolean | false / true | false |
size | 尺寸 | string | middle / small / large | middle |
color | 颜色 | string | 任意合法颜色值 | #8c6fef |
disabled | 是否禁用 | boolean | false / true | false |
骨架
这里我们可以参考 button
组件,因为 switch
组件具有和 button
组件一样的”点击”之功能,所以这里可以直接使用 button
标签来实现,然后再用一个 div
来充当滑块,很容易得到如下骨架:
<template>
<button
@click="toggle"
class="jeremy-swicth"
:class="{ active: value }"
:size="size"
:style="{ '--color': color }"
:disabled="disabled"
>
<div></div>
</button>
</template>
功能
首先,我们再 Typescript
中声明一些需求分析中的属性:
declare const props: {
value: boolean;
size?: "middle" | "small" | "large";
color: string;
disabled: boolean;
};
declare const context: SetupContext;
然后,再在 export default
中写入声明的参数:
export default {
install: function (Vue) {
Vue.component(this.name, this);
},
name: "JeremySwitch",
props: {
value: {
type: Boolean,
default: false,
},
size: {
type: String,
default: "middle",
},
color: {
type: String,
default: "#8c6fef",
},
disabled: {
type: Boolean,
default: false,
},
},
};
最后,再补全 setup
方法:
setup(props, context) {
const toggle = () => {
context.emit("update:value", !props.value);
};
return { toggle };
},
样式表
补全层叠样式表:
<style lang="scss">
@mixin layout($r, $d) {
$r2: $r - $d;
display: inline-block;
position: relative;
border: none;
background: #adadad;
outline: none;
transition: background-color 250ms;
cursor: pointer;
:focus {
outline: none;
}
> div {
position: absolute;
background: white;
border-radius: 50%;
transition: left 250ms;
height: $r2;
width: $r2;
top: $d/2;
left: $d/2;
}
height: $r;
width: $r * 2;
border-radius: $r / 2;
&.active {
background: var(--color);
> div {
left: calc(100% - #{$r2} - #{$d/2});
}
}
}
$r: 20px;
$d: 4px;
.jeremy-swicth[size="small"] {
@include layout($r, $d);
}
.jeremy-swicth[size="middle"] {
@include layout($r * 1.5, $d * 1.5);
}
.jeremy-swicth[size="large"] {
@include layout($r * 2, $d * 2);
}
.jeremy-swicth[disabled] {
cursor: not-allowed;
}
</style>
测试
创建一个测试页,导入 JeremySwitch
组件,看一下效果:
项目地址
GitHub: https://github.com/JeremyWu917/jeremy-ui
官网地址
JeremyUI: https://ui.jeremywu.top
感谢阅读
07- Vue3 UI Framework - Switch 组件的更多相关文章
- 05 - Vue3 UI Framework - Button 组件
官网基本做好了,接下来开始做核心组件 返回阅读列表点击 这里 目录准备 在项目 src 目录下创建 lib 文件夹,用来存放所有的核心组件吧.然后再在 lib 文件夹下创建 Button.vue 文件 ...
- 06 - Vue3 UI Framework - Dialog 组件
做完按钮之后,我们应该了解了遮罩层的概念,接下来我们来做 Dialog 组件! 返回阅读列表点击 这里 需求分析 默认是不可见的,在用户触发某个动作后变为可见 自带白板卡片,分为上中下三个区域,分别放 ...
- 08 - Vue3 UI Framework - Input 组件
接下来再做一个常用的组件 - input 组件 返回阅读列表点击 这里 需求分析 开始之前我们先做一个简单的需求分析 input 组件有两种类型,即 input 和 textarea 类型 当类型为 ...
- 09 - Vue3 UI Framework - Table 组件
接下来做个自定义的表格组件,即 table 组件 返回阅读列表点击 这里 需求分析 开始之前我们先做一个简单的需求分析 基于原生 table 标签的强语义 允许用户自定义表头.表体 可选是否具有边框 ...
- 10 - Vue3 UI Framework - Tabs 组件
标签页是非常常用的组件,接下来我们来制作一个简单的 Tabs 组件 返回阅读列表点击 这里 需求分析 我们先做一个简单的需求分析 可以选择标签页排列的方向 选中的标签页应当有下划线高亮显示 切换选中时 ...
- 11 - Vue3 UI Framework - Card 组件
卡片是非常常用也是非常重要的组件,特别是在移动端的众多应用场景中,随便打开一个手机 App ,您会发现充斥着各种各样的卡片. 所以,我们也来制作一个简易的 Card 组件 返回阅读列表点击 这里 需求 ...
- 00 - Vue3 UI Framework - 阅读辅助列表
阅读列表 01 - Vue3 UI Framework - 开始 02 - Vue3 UI Framework - 顶部边栏 03 - Vue3 UI Framework - 首页 04 - Vue3 ...
- 04 - Vue3 UI Framework - 文档页
官网的首页做完了,接下来开始做官网的文档页 返回阅读列表点击 这里 路由设计 先想想我们需要文档页通向哪些地方,这里直接给出我的设计: 所属 子标题 跳转路径 文件名(*.vue) 指南 介绍 /do ...
- 01 - Vue3 UI Framework - 开始
写在前面 一年多没写过博客了,工作.生活逐渐磨平了棱角. 写代码容易,写博客难,坚持写高水平的技术博客更难. 技术控决定慢慢拾起这份坚持,用作技术学习的阶段性总结. 返回阅读列表点击 这里 开始 大前 ...
随机推荐
- [luogu7740]机器人游戏
考虑容斥,令$f(S)$为要求$\forall p\in S,p$可以作为起点的方案数,答案即$\sum_{S\subseteq[0,n)}(-1)^{|S|}f(S)$ 关于计算$f(S)$,对于第 ...
- [loj2462]完美的集合
当$k$个集合依次为$S_{1},S_{2},...,S_{k}$时,称$x$合法当且仅当: 1.$\forall 1\le i\le k,x\in S_{i}$ 2.$\forall y\in \b ...
- List、ArrayList、迭代器、链表、Vector
1.List接口中的常用方法. List是Collection接口的子接口.所以List接口中有一些特有的方法. void add(int index, Object element) Object ...
- k8s-Pod污点与容忍
目录 Pod污点与容忍 大白话先解释一下污点与容忍 为什么要用污点和容忍? 官方解释 Taints参数 标记污点 容忍污点 取消所有节点污点 Pod污点与容忍 大白话先解释一下污点与容忍 污点:被打上 ...
- ES2020新特性链操作符 '?.'和'??'
ES2020新特性,js中的可选链操作符?. 概述 回想一下,我们是如何访问可能含有空值(null或undefined)属性的嵌套对象,比如访问web api 返回结果的user详情,可以使用嵌套的三 ...
- Codeforces 538G - Berserk Robot(乱搞)
Codeforces 题目传送门 & 洛谷题目传送门 一道很神的乱搞题 %%% 首先注意到如果直接去做,横纵坐标有关联,不好搞.这里有一个非常套路的技巧--坐标轴旋转,我们不妨将整个坐标系旋转 ...
- STL的equal_range()
equal_range()根据键值,返回一对迭代器的pair对象. 如果该键值在容器中存在,则pair对象中的第一个迭代器指向该键关联的第一个实例,第二个迭代器指向该键关联的最后一个实例的下一位置. ...
- 代码整洁之道Clean Code笔记
@ 目录 第 1 章 Clean Code 整洁代码(3星) ?为什么要整洁的代码 ?什么叫做整洁代码 第 2 章 Meaningful Names 有意义的命名(3星) 第 3 章 Function ...
- IDEA 配置背景颜色(豆沙绿)
1. 定义方案名字(my color) Ctrl + Shift + a --> Color Scheme // 快捷定位配置 // 路径:File --> Settings --> ...
- Debugging and Running MPI in Xcode
1.安装 mpich2 与 Xcode mpich2安装地址:/usr/local/Cellar/mpich2/3.1.4/ Xcode 版本:Version 6.2 (6C131e) 2.新建工程 ...