Skip to content

Switch 开关选择器

用于在打开和关闭状态之间进行切换。

基础使用

通过 v-model 属性绑定开关的选中状态,true 表示开,false 表示关。

vue
<template>
    <hi-switch v-model="isChecked"></hi-switch>
</template>

<script setup>
    import { ref } from "vue";

    // 开关状态
    const isChecked = ref(false);
</script>

禁用状态

通过 disabled 属性来禁用开关,禁用状态下开关不可点击。

vue
<template>
    <hi-switch v-model="isChecked" disabled></hi-switch>
</template>

加载状态

通过 loading 属性设置开关为加载状态,加载状态下开关不可点击。

vue
<template>
    <hi-switch v-model="isChecked" loading></hi-switch>
</template>

自定义 on / off 状态色

通过 offColoronColor 属性来自定义开关关闭时和打开时的颜色。

vue
<template>
    <hi-switch v-model="isChecked" offColor="#FF9900" onColor="#FF0000"></hi-switch>
</template>

异步控制

需要异步控制开关时,可以使用 async 属性开启异步控制功能,此时点击开关时会触发 asyncChange 事件,在事件中手动处理开关状态。

vue
<template>
    <hi-switch v-model="isChecked" async @asyncChange="onAsyncChange"></hi-switch>
</template>

<script setup>
    import { ref } from "vue";

    // 开关状态
    const isChecked = ref(false);

    // 异步变更事件
    // nowValue: 当前状态
    function onAsyncChange(nowValue) {
        uni.showModal({
            title: "异步变更",
            content: "切换状态?",
            showCancel: true,
            success: ({ confirm, cancel }) => {
                if (confirm) isChecked.value = !nowValue;
            }
        });
    }
</script>

off / on 图标

  • 通过 offIcon 设置关闭状态时的图标。
  • 通过 onIcon 设置打开状态时的图标。
vue
<template>
    <hi-switch v-model="isChecked" offIcon="__jian" onIcon="__checked"></hi-switch>
</template>

off / on 文字

  • 通过 offIcon 设置关闭状态时的文字。
  • 通过 onIcon 设置打开状态时的文字。
vue
<template>
    <hi-switch v-model="isChecked" offText="关" onText="开"></hi-switch>
</template>

off / on 文字位置

默认 off / on 文字的位置在圆上,将 inside 属性设置为 true,可以将 off / on 文字放置在圆下,具体效果参考右侧演示。

vue
<template>
    <hi-switch v-model="isChecked" offText="关" onText="开" inside></hi-switch>
</template>

主题

为了方便使用,此组件支持设置主题,主题对应开关打开时的颜色(onColor)。

vue
<template>
    <hi-switch v-model="isChecked" offText="关" onText="开" theme="primary"></hi-switch>
    <hi-switch v-model="isChecked" offText="关" onText="开" theme="success"></hi-switch>
    <hi-switch v-model="isChecked" offText="关" onText="开" theme="warning"></hi-switch>
    <hi-switch v-model="isChecked" offText="关" onText="开" theme="error"></hi-switch>
    <hi-switch v-model="isChecked" offText="关" onText="开" theme="info"></hi-switch>
</template>

自定义加载图标颜色和大小

  • 通过 loadingColor 设置加载图标颜色。
  • 通过 loadingSize 设置加载图标大小。
vue
<template>
    <hi-switch v-model="isChecked" loading loadingColor="#ff0000" loadingSize="12px"></hi-switch>
</template>

自定义 off/ on 图标颜色和大小

  • 通过 offIconColor 设置关闭状态时图标的颜色。
  • 通过 offIconSize 设置关闭状态时图标的大小。
  • 通过 onIconColor 设置开启状态时图标的颜色。
  • 通过 onIconSize 设置开启状态时图标的大小。
vue
<template>
    <hi-switch
        v-model="isChecked"
        offIcon="__jian"
        onIcon="__checked"
        offIconSize="12px"
        offIconColor="red"
        onIconSize="12px"
        onIconColor="#FBC424"
        theme="success"
    ></hi-switch>
</template>

自定义 off/ on 文字颜色和大小

  • 通过 offTextColor 设置关闭状态时文字的颜色。
  • 通过 offTextFontSize 设置关闭状态时文字的大小。
  • 通过 onTextColor 设置开启状态时文字的颜色。
  • 通过 onTextFontSize 设置开启状态时文字的大小。
vue
<template>
    <hi-switch
        v-model="isChecked"
        offText="关"
        onText="开"
        offTextFontSize="15px"
        offTextColor="red"
        onTextFontSize="15px"
        onTextColor="#FBC424"
        theme="warning"
    ></hi-switch>
</template>

Props

属性名说明类型默认值可选值版本
v-mode绑定的状态值Booleanfalsetrue-
width组件宽度String---
circleSize开关组件中圆的大小String1.8em--
distance开关组件中圆和组件之间的距离String2px--
disabled是否禁用Booleanfalsetrue-
loading是否显示加载状态Booleanfalsetrue-
loadingIcon加载图标名称String__loading--
loadingColor加载图标颜色String---
loadingSize加载图标大小String---
offColor关闭状态时的颜色String---
onColor开启状态时的颜色String---
async是否开启异步控制Booleanfalsetrue-
offIcon关闭状态图标String---
offIconColor关闭状态图标颜色String---
offIconSize关闭状态图标大小String---
onIcon开启状态图标String---
onIconColor开启状态图标颜色String---
onIconSize开启状态图标大小String---
offText关闭状态文字String---
offTextColor关闭状态文字颜色String---
offTextFontSize关闭状态文字大小String---
onText开启状态文字String---
onTextColor开启状态文字颜色String---
onTextFontSize开启状态文字大小String---
inside文字是否在圆下方Booleanfalsetrue-
theme主题String---
circleBg圆的背景String---

Event

事件名说明回调参数版本
change状态改变事件status: 最新状态值。-
asyncChange异步控制回调事件status: 当前状态值。-

样式变量

组件提供了以下样式变量,可以在使用时设置这些变量来修改组件的样式。

变量名默认值版本
--hi-switch-align-itemscenter-
--hi-switch-justify-contentspace-between-
--hi-switch-width4em-
--hi-switch-heightcalc(var(--hi-switch-circle-size) + var(--hi-switch-distance) * 2)-
--hi-switch-padding0 8px-
--hi-switch-border-radius100em-
--hi-switch-transition0.3s-
--hi-switch-node-backgroundvar(--hi-background-element)-
--hi-switch-node-border-radius50%-
--hi-switch-node-z-index2-
--hi-switch-node-transitionleft 0.3s-
--hi-switch-node-displayflex-
--hi-switch-node-align-itemscenter-
--hi-switch-node-justify-contentcenter-
--hi-switch-icon-font-sizecalc(var(--hi-switch-circle-size) * 0.6)-
--hi-switch-icon-colorinherit-
--hi-switch-loading-duration1500ms-
--hi-switch-loading-timing-functionlinear-
--hi-switch-loading-iteration-countinfinite-
--hi-switch-loading-icon-font-sizecalc(var(--hi-switch-circle-size) * 0.6)-
--hi-switch-loading-icon-colorvar(--hi-theme-primary)-
--hi-switch-off-icon-colorvar(--hi-switch-off-color, var(--hi-background-default))-
--hi-switch-off-icon-font-sizecalc(var(--hi-switch-circle-size) * 0.6)-
--hi-switch-on-icon-colorvar(--hi-switch-on-color, var(--hi-theme-primary))-
--hi-switch-on-icon-font-sizecalc(var(--hi-switch-circle-size) * 0.6)-
--hi-switch-text-colorinherit-
--hi-switch-text-font-sizecalc(var(--hi-switch-circle-size) * 0.4)-
--hi-switch-off-text-colorvar(--hi-switch-off-color, var(--hi-background-default)) / var(--hi-switch-off-color, var(--hi-theme-primary))-
--hi-switch-off-text-font-sizecalc(var(--hi-switch-circle-size) * 0.4)-
--hi-switch-on-text-colorvar(--hi-switch-on-color, var(--hi-theme-primary)) / var(--hi-switch-on-color, var(--hi-background-default))-
--hi-switch-on-text-font-sizecalc(var(--hi-switch-circle-size) * 0.4)-
--hi-switch-on-colorvar(--hi-theme-primary)-
--hi-switch-off-colorvar(--hi-background-default)-

基于 MIT 许可发布