Skip to content

SwitchButton 切换按钮 ​

基础用法 ​

可切换选中状态的按钮,内部基于 sn-button 扩展。

  • 绑定布尔值,点击在选中与未选中之间切换
  • 选中态与未选中态各自拥有独立配色,可用等级机制组合,也可直接指定两态的背景色与文字色
  • 支持两态不同文案与图标、加载与禁用状态,以及文本、图标的外部样式扩展

文本传参

文本请统一通过 text / active-text 传入(组件不透传插槽)。子组件 sn-button 以 $slots.default != null 判定插槽,若向上层透传空插槽会导致文本属性被忽略、按钮显示为空。

vue
<template>
	<sn-switch-button v-model="value" text="关注" active-text="已关注" active-type="success"
		active-level="second"></sn-switch-button>
</template>

<script lang="uts" setup>
const value = ref<boolean>(false)
</script>

更多演示请下载 demo 查看

两态配色(type / level) ​

未选中态与选中态分别由 type + level 与 active-type + active-level 决定,四级 level 的表现程度与 sn-button 一致:

level背景色文字色
first功能色原色功能色背景上的文字色
second功能色浅色(Light)功能色原色
thirdinfo 信息色功能色原色
least透明功能色原色
vue
<template>
	<sn-switch-button v-model="value" type="info" level="second" active-type="primary" active-level="first"></sn-switch-button>
	<sn-switch-button v-model="value2" type="primary" level="least" active-type="primary" active-level="first"></sn-switch-button>
</template>

<script lang="uts" setup>
const value = ref<boolean>(false)
const value2 = ref<boolean>(true)
</script>

自定义两态颜色 ​

直接传入颜色属性即可覆盖等级配色,两态的颜色互不影响,可只覆盖其中一态。颜色值支持 $ 简写(如 $primary、$textLight),也可传入 #rrggbb、rgb()、rgba() 等常规颜色值:

vue
<template>
	<sn-switch-button v-model="value" text="关注" active-text="已关注" bg-color="rgba(124,92,255,0.15)"
		text-color="#7c5cff" active-bg-color="#7c5cff" active-text-color="#ffffff"></sn-switch-button>
</template>

<script lang="uts" setup>
const value = ref<boolean>(false)
</script>

镂空(plain) ​

plain 为 true 时背景固定为透明,只保留边框与文字:文字与边框取当前态(未选中取 type、选中取 active-type)的功能色原色,不会取"功能色背景上的文字色",因此在透明背景上始终可见;active-level 不再影响镂空态的文字色。

vue
<template>
	<sn-switch-button v-model="value" plain text="镂空" border-color="$line" text-color="$textLight"
		active-type="primary" active-level="first"></sn-switch-button>
</template>

可用 border-color / active-border-color 分别覆盖两态边框色(上例未选中为浅灰描边、选中为蓝色描边,状态切换一目了然);dashed 可将边框改为虚线。

属性 ​

参数说明类型默认值可选值
v-model绑定值,当前是否选中Booleanfalsetrue | false
type未选中态功能色类型Stringinfoprimary | info | success | error | warning
level未选中态等级,决定表现程度(first 最重、least 最轻)Stringsecondfirst | second | third | least
activeType选中态功能色类型Stringprimaryprimary | info | success | error | warning
activeLevel选中态等级Stringfirstfirst | second | third | least
text未选中态文本内容String''-
activeText选中态文本内容,沿用 textString--
bgColor未选中态背景颜色,传入后覆盖等级配色String''-
activeBgColor选中态背景颜色,传入后覆盖等级配色String''-
textColor未选中态文字与图标颜色String''-
activeTextColor选中态文字与图标颜色String''-
borderColor未选中态边框颜色,取该态功能色原色String--
activeBorderColor选中态边框颜色,取该态功能色原色String--
size按钮尺寸,影响内边距、字号与圆角Stringnormalsmall | normal | large
shape按钮形状,circle 时为纯图标圆形按钮Stringrectrect | circle
icon图标名称(sn-icon 图标名)String''-
iconPosition图标位置Stringleftleft | right
iconSize图标大小String | Number''-
radius自定义按钮圆角String | Number''-
plain是否镂空(透明背景 + 边框样式)Booleanfalsetrue | false
dashed是否虚线边框(一般配合 plain 使用)Booleanfalsetrue | false
disabled是否禁用,禁用后不可切换Booleanfalsetrue | false
loading是否加载状态,显示加载遮罩并阻止切换Booleanfalsetrue | false
loadingStyle加载指示器自定义样式SnStyleValue''-
hoverStyle按下时的点击态样式SnStyleValue''-
hoverStopPropagation是否阻止点击态的父节点传播Booleanfalsetrue | false
hoverStartTime按下后点击态出现的延迟时间(ms)Number0-
hoverStayTime松手后点击态保留的时间(ms)Number0-
hoverTransTime点击态过渡动画时长,支持 $ 前缀String | Number''-
textClass文本外部样式类String''-
textStyle文本自定义样式SnStyleValue''-
iconClass图标外部样式类String''-
iconStyle图标自定义样式SnStyleValue''-
customStyle自定义根节点(按钮本体)样式SnStyleValue''-
customClass根节点外部样式类String''-

事件 ​

名称类型说明
click() => Void点击按钮时触发(禁用或加载状态下不触发)
change(value: boolean) => Void选中状态改变时触发,携带切换后的新值

使用 MIT 协议