文章目录

  • 组件介绍
  • 开发思路
  • 组件安装与使用
  • 组件代码
  • 参数说明
  • 事件
  • 关于dxui组件库

组件介绍

“Switch” 组件是用户界面中的一种常见交互元素,通常用于在两个状态之间进行切换,例如开启/关闭、启用/禁用、显示/隐藏等。“Switch” 组件通常由一个可滑动的控件和两个状态表示,用户可以通过点击或拖动来切换状态。以下是关于 “Switch” 组件的介绍和特点:

  1. 二进制切换:

    • “Switch” 组件是一种二进制开关,它只有两种状态,通常表示开启或关闭。
  2. 用户友好:

    • “Switch” 组件通常具有直观的用户界面,用户可以轻松地切换两种状态。
  3. 文本标签:

    • 通常, “Switch” 组件可以伴随文本标签,用于描述两种状态,以提供更多的上下文信息。
  4. 自定义样式:

    • 开发人员通常可以自定义 “Switch” 组件的样式,包括颜色、形状、尺寸等。
  5. 可访问性:

    • 良好的 “Switch” 组件应该考虑到可访问性,以确保它对于使用辅助技术的用户也是可访问的。
  6. 事件处理:

    • “Switch” 组件通常支持事件处理,开发人员可以监听状态切换事件,并在状态发生变化时执行自定义操作。
  7. 响应式设计:

    • “Switch” 组件通常支持响应式设计,以适应不同屏幕尺寸和设备类型。
  8. 多用途:

    • “Switch” 组件可用于多种场景,如在设置面板中切换选项、启用/禁用功能、显示/隐藏内容等。
  9. 可控性:

    • 一些 “Switch” 组件支持通过编程方式来控制状态,允许应用程序根据用户的需求自动切换状态。

“Switch” 组件在用户界面设计中非常有用,它们提供了一种直观的方式来切换应用程序中的状态或选项。这种组件通常用于网页应用程序、移动应用程序、桌面应用程序等,以改善用户体验和提供用户友好的交互方式。前端框架和库通常提供了 “Switch” 组件的实现,或者你可以自行编写代码来创建适合你应用程序需求的开关功能。

开发思路

通常一个switch开关组件需要实现的功能如下

  1. 能够流畅的切换开关。
  2. 需要能及时反馈开关的状态。
  3. 能够出现提示的文字,在开关开启或关闭的时候
  4. 最好能够自适应宽度,以便文字的长度能尽可能的满足
  5. disabled状态需要实现

组件安装与使用

需要先安装vue3-dxui

yarn add vue3-dxui

或者

npm install vue3-dxui

全局main.ts中引入css

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import 'vue3-dxui/dxui/dxui.css'createApp(App).use(store).use(router).mount('#app')

按需引入

<script>
import { Switch } from 'vue3-dxui'export default {components: {Switch}
}
</script>

组件代码

<template><divclass="dx-switch-warpper":class="switchDisabledClass ? 'dx-switch-disabled' : ''"@click="changeSwitchStatus"><div class="dx-switch-status" :class="switchStatusClass"><span class="dx-switch-text">{{ switchStatusText }}</span></div></div>
</template><script lang="ts">
import { ComponentInternalInstance, getCurrentInstance, ref, PropType, watchEffect } from 'vue'
import { Data } from './types'export default {props: {checked: {required: false,default: undefined,type: Boolean},defaultChecked: {required: false,default: undefined,type: Boolean},disabled: {required: false,default: false,type: Boolean},openText: {required: false,default: '',type: String},closeText: {required: false,default: '',type: String}},setup(props: Data) {const currentInstance: ComponentInternalInstance | null = getCurrentInstance()const checkedValue = ref(props.checked)const switchDisabledClass = ref(props.disabled)const switchStatusClass = ref('dx-switch-close')const switchStatusText = ref('')const changeSwitchStatus = function (e: Event) {if (props.disabled) {return}currentInstance?.emit('switchClick', checkedValue.value, e)if (props.checked !== undefined) {checkedValue.value = props.checked} else if (!props.disabled) {checkedValue.value = !checkedValue.valuecurrentInstance?.emit('change', checkedValue.value, e)}}if (props.checked === true) {checkedValue.value = true} else if (props.checked === false) {checkedValue.value = false} else if (props.defaultChecked === true) {checkedValue.value = true} else if (props.defaultChecked === false) {checkedValue.value = false}watchEffect(() => {if (checkedValue.value) {switchStatusClass.value = 'dx-switch-open'switchStatusText.value = props.openText as string} else {switchStatusClass.value = 'dx-switch-close'switchStatusText.value = props.closeText as string}})return {checkedValue,switchStatusClass,switchStatusText,switchDisabledClass,changeSwitchStatus}}
}
</script><style lang="scss" scoped>
@import '@/scss/layout.scss';
.dx-switch-warpper {min-width: 44px;height: 24px;margin-right: 8px;cursor: pointer;display: inline-block;position: relative;user-select: none;.dx-switch-status {width: 100%;height: 100%;border-radius: 12px;vertical-align: bottom;}.dx-switch-open {background-color: $blue-color;border: 1px solid $blue-color;.dx-switch-text {padding-right: 24px;padding-left: 6px;font-size: 14px;color: $white-color;}&::before {margin-top: 3px;margin-left: calc(100% - 22px);position: absolute;content: '';width: 16px;height: 16px;border-radius: 8px;background-color: $white-color;}}.dx-switch-close {background-color: $grey-color;border: 1px solid $grey-color;.dx-switch-text {padding-right: 6px;padding-left: 24px;font-size: 14px;color: $white-color;}&::before {position: absolute;margin: 3px 0 0 3px;content: '';width: 16px;height: 16px;border-radius: 8px;background-color: $white-color;}}
}.dx-switch-disabled {cursor: not-allowed;.dx-switch-open {background-color: $grey-color;border: 1px solid $grey-color;&::before {margin-top: 3px;margin-left: calc(100% - 22px);position: absolute;content: '';width: 16px;height: 16px;border-radius: 8px;background-color: $white-color;}}
}
</style>

参数说明

参数 说明
checked 布尔值类型,默认值是undefined 父组件传递时,将会 让组件变为一个完全受控组件,只有当父组件的checked发生变化时,switch的状态才会发生改变
defaultChecked 布尔值类型,默认值是false 父组件传递时,将会给与组件一个初始值,但不影响组件自身发生任何变化
disabled 布尔值类型,默认值是false, 决定组件是否被禁用
openText 字符串类型 string, 在switch组件处于开启状态时展示
closeText 字符串类型 string, 在switch组件处于关闭状态时展示

事件

事件名称 说明
change 函数类型, 当组件状态发生改变,可以通过函数的第一个参数来获取将要改变的状态(如果父组件传递了checked,组件本身无法改变状态),第二个参数为事件对象
switchClick 函数类型, 点击组件时触发,可以通过函数的第一个参数来获取组件当前的状态(如果父组件传递了checked,组件本身无法改变状态),第二个参数为实践对象

关于dxui组件库

dxui组件库是我个人搭建的vue3 前端交互组件库,倾向于pc网站的交互模式。

  1. 如果你有任何问题,请在博客下方评论留言,我尽可能24小时内回复。
  2. dxui新上线的官网域名变更 http://dxui.cn
  3. npm 官方链接 https://www.npmjs.com/package/vue3-dxui
  4. 如果你想看完整源码 https://github.com/757363985/dxui

vue3 组件篇 Switch相关推荐

  1. vue3 组件篇 Affix

    文章目录 组件介绍 组件库安装与使用 组件代码 参数说明 事件 关于dxui组件库 组件介绍 Affix是一种常用于前端界面设计的组件,它可以让网页元素固定在页面中的某个位置,随着用户的滚动而保持不变 ...

  2. vue3组件篇 Slider

    文章目录 组件介绍 组件安装与使用 组件代码 参数说明 事件 关于dxui组件库 组件介绍 slider组件已成为前端开发中广泛使用的UI组件之一.Slider组件可以让用户在一个可选范围内选择一个值 ...

  3. vue3组件篇 Select

    文章目录 组件介绍 何时使用 基本功能 组件安装与使用 组件代码 参数说明 事件 关于dxui组件库 组件介绍 何时使用 弹出一个下拉菜单给用户选择操作,用于代替原生的选择器,或者需要一个更优雅的多选 ...

  4. vue3 组件篇 tag

    文章目录 组件介绍 标准用法 自定义背景色和字体颜色 点击和关闭的回调 组件代码 参数说明 关于dxui组件库 组件介绍 tag组件,是前端开发常用组件之一,无论是移动端,还是pc端,我们都能经常看到 ...

  5. Android攻城狮组件篇—BroadcastReceiver

    组件篇-BroadcastReceiver 1. Boastcast(广播)是一种广泛运用的在应用程序之间传输信息的机制. 2. BroadcastReceiver(广播接受者)是对发送出来的广播进行 ...

  6. VUE3组件库-input组件

    theme: mk-cute 这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战 VUE3组件库-input组件 大家好,今天一起来学习vue3实现input组件,希望对你有帮助 目录预览 基 ...

  7. 手把手教你写一个Vue3组件库但是乞丐版

    好久没写文章了,最近在研究一些组件库的实现方法,分享一下.在这我这篇文章之前其实已经有一篇文章讲了Vue如何打包组件库了(最底部),但是这篇文章一是没有源码二是Vue3和Vue2的组件库写法有点不一样 ...

  8. 使用 Vite 和 TypeScript 从零打造一个属于自己的 Vue3 组件库

    前言 随着前端技术的发展,业界涌现出了许多的UI组件库.例如我们熟知的ElementUI,Vant,AntDesign等等.但是作为一个前端开发者,你知道一个UI组件库是如何被打造出来的吗? 读完这篇 ...

  9. Xamarin Android组件篇教程RecylerView动画组件RecylerViewAnimators(1)

    Xamarin Android组件篇教程RecylerView动画组件RecylerViewAnimators(1) RecyclerView是比ListView和GridView更为强大的布局视图, ...

  10. 九十一、Python的GUI系列 | QT组件篇

    @Author:Runsen @Date:2020/7/13 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

最新文章

  1. 2019年上半年收集到的人工智能强化学习干货文章
  2. tensorflow 之 ValuError: At least two variables have the same name: bottom/bn1/beta_power0 等
  3. 移动端开发——javascript
  4. SourceInsight 设置点滴
  5. Python3 爬虫学习笔记 C10【数据储存系列 — MySQL】
  6. 联想e431笔记本更改硬盘模式bios设置的详细教程
  7. 报告客户端Web应用程序中的错误时的安全问题
  8. json在线格式化【推荐】
  9. ubuntu安装使用latex和texmaker--PC端
  10. C语言小游戏(flappy bird),附带源码及素材
  11. java 下载文件的文件名乱码_java下载文件名乱码解决方法介绍
  12. PDF--变清晰方法
  13. 阿里企业邮箱收费版与免费版有哪些规格和功能上的区别?
  14. [AMV-GCNs Neurocomputing2021] Adaptive multi-view graph convolutional networks for skeleton-based ac
  15. esxi 环境 西数硬盘测试软件,手把手教你测试固态硬盘!硬盘测试软件大汇总
  16. 食堂报餐点餐公司订餐微信小程序源码开发使用
  17. Auto.js学习笔记13:images.findImag()报错找不到方法,返回的坐标无法点击等问题利用图片的相似度执行精准目标点击(实战篇)
  18. excel怎么按颜色统计单元格个数
  19. 2.04 标志寄存器
  20. OpenCL Programming Guide - OpenCL 编程指南 - 书中源代码

热门文章

  1. 网站优化在搜索引擎上想有好排名
  2. SQL Server 如何添加删除外键、主键,以及更新自增属性
  3. 【小编支招:正确启用BIOS显卡 预防电脑黑屏困扰】
  4. [附源码]Java计算机毕业设计SSM超市进销存系统
  5. logstash 中文字段乱码问题
  6. MLU370-M8轻轻松松跑通Qwen-7B-chat
  7. Python爬虫(七)
  8. 走遍东西南北中 畅游江津更轻松 “耍不够的江津”欢迎您
  9. 温度转换实例(Python)
  10. forget suffix word aby able ability out 1