pumpkin-ui
指南
组件
指南
组件
  • 基础组件

    • Button 按钮
    • Cell 单元格
    • Icon 图标
    • Popup 弹出层
    • Toast 轻提示
  • 表单组件

    • PickerView 选择器视图
    • Picker 选择器
    • DatePicker 日期时间选择器
    • Switch 开关
    • Field 输入项
    • Form 表单
    • Checkbox 复选框
    • Radio 单选框
  • 反馈组件

    • Overlay 遮罩
    • Loading 加载
    • ActionSheet 动作面板
    • Notify 消息提示
    • Skeleton 骨架屏
    • Dialog 对话框
  • 展示组件

    • Progress 进度条
    • Divider 分割线
    • Badge 徽标
    • Empty 空元素
    • Tag 标签

Switch 开关

基本使用

<pk-switch></pk-switch>

代码示例

基础用法

创建一个开关。

template
<div class="switch-container">
    <pk-cell-group>
        <pk-cell title="小号">
            <pk-switch v-model="value" />
        </pk-cell>
    </pk-cell-group>
</div>
script
import { PkSwitch, PkCell, PkCellGroup } from "@pumpkin-ui/mobile";
import { ref } from "vue";

const value = ref(true)
style
.switch-container {
    padding: 10px 0;
}

大小

通过size属性设置开关的大小。

template
<div class="switch-container">
    <pk-cell-group>
        <pk-cell title="小号">
            <pk-switch v-model="value" />
        </pk-cell>
        <pk-cell title="大号">
            <pk-switch v-model="value" size="l" />
        </pk-cell>
        <pk-cell title="中号">
            <pk-switch v-model="value" size="m" />
        </pk-cell>
    </pk-cell-group>
</div>
script
import { PkSwitch, PkCell, PkCellGroup } from "@pumpkin-ui/mobile";
import { ref } from "vue";

const value = ref(true)
style
.switch-container {
    padding: 10px 0;
}

禁用

通过disabled属性设置开关的禁用。

template
<div class="switch-container">
    <pk-cell-group>
        <pk-cell title="禁用">
            <pk-switch v-model="value" :disabled="true" />
        </pk-cell>
    </pk-cell-group>
</div>
script
import { PkSwitch, PkCell, PkCellGroup } from "@pumpkin-ui/mobile";
import { ref } from "vue";

const value = ref(true)
style
.switch-container {
    padding: 10px 0;
}

显示加载

通过loading属性设置开关的加载。

template
<div class="switch-container">
    <pk-cell-group>
        <pk-cell title="显示加载">
            <pk-switch v-model="value" :loading="true" />
        </pk-cell>
    </pk-cell-group>
</div>
script
import { PkSwitch, PkCell, PkCellGroup } from "@pumpkin-ui/mobile";
import { ref } from "vue";

const value = ref(true)
style
.switch-container {
    padding: 10px 0;
}

onChange事件

通过onChange监听值改变。

提示

该事件需要用户主动触发,如果是通过v-model等方式修改,则不会触发。

template
<div class="switch-container">
    <pk-cell-group>
        <pk-cell title="onChange事件">
            <pk-switch v-model="value" @onChange="onChange" />
        </pk-cell>
    </pk-cell-group>
</div>
script
import { PkSwitch, PkCell, PkCellGroup, Toast } from "@pumpkin-ui/mobile";
import { ref } from "vue";

const value = ref(true)


const onChange = (val) => {
    Toast.show(`当前状态:${val}`)
}
style
.switch-container {
    padding: 10px 0;
}

异步修改

通过beforeChange属性实现。

template
<div class="switch-container">
    <pk-cell-group>
        <pk-cell title="异步修改">
            <pk-switch v-model="value" :before-change="beforeChange" :loading="loading" />
        </pk-cell>
    </pk-cell-group>
</div>
script
import { PkSwitch, PkCell, PkCellGroup } from "@pumpkin-ui/mobile";
import { ref } from "vue";

const value = ref(true)
const loading = ref(false)
const beforeChange = (oldValue, newValue) => {
    return new Promise((resolve, reject) => {
        loading.value = true
        setTimeout(() => {
            resolve(true)
            loading.value = false
        }, 3000)
    })
}
style
.switch-container {
    padding: 10px 0;
}

自定义颜色

通过background设置开关打开时的背景,通过inactive-background设置开关关闭时的背景。

template
<div class="switch-container">
    <pk-cell-group>
        <pk-cell title="自定义颜色">
            <pk-switch v-model="value" background="red" inactive-background="#37373d" />
        </pk-cell>
    </pk-cell-group>
</div>
script
import { PkSwitch, PkCell, PkCellGroup } from "@pumpkin-ui/mobile";
import { ref } from "vue";

const value = ref(true)
style
.switch-container {
    padding: 10px 0;
}

API

Props

属性名说明类型默认值可选值
v-model当前开关的状态值boolean
size开关的大小'l'|'m'|'s'm'l'|'m'|'s'
disabled是否禁用booleanfalse
loading是否显示加载状态booleanfalse
loading-size设置加载图标的大小string20px
loading-type设置加载图标的样式,与loading组件的type属性一致'circular'| 'spinner'circular'circular'| 'spinner'
loading-color设置加载图标的颜色string
background设置开关打开时的背景string
inactive-background设置开关关闭时的背景string
before-change值修改前的事件,返回false将阻止修改,支持Promise(oldValue:boolean,newValue:boolean)=>boolean|Promise<boolean>

Events

事件名说明回调参数
click点击时触发(加载或者禁用状态也会触发)(event: MouseEvent) => void
onChange点击时触发(加载或者禁用状态也会触发。需要用户主动触发,如果通过v-model修改不会触发)(value: boolean) => void

Slots

插槽名说明
slide滑块区域

示例

template
<div class="switch-container">
    <pk-cell-group>
        <pk-cell title="slide插槽">
            <pk-switch v-model="value">
                <template #slide>
                    <template v-if="value">✅</template>
                    <template v-else>❎</template>
                </template>
            </pk-switch>
        </pk-cell>
    </pk-cell-group>
</div>
script
import { PkSwitch, PkCell, PkCellGroup } from "@pumpkin-ui/mobile";
import { ref } from "vue";

const value = ref(true)
style
.switch-container {
    padding: 10px 0;
}

Exposes

名称说明类型说明

样式变量

名称默认值说明
--switch-height-s20px
--switch-height-m26px
--switch-height-l32px
--switch-width60px
--switch-inactive-backgroundvar(--pk-inactive-bg-color)
--switch-active-backgroundvar(--pk-primary-color)
--switch-transition-durationvar(--pk-transition-duration)
--switch-transition-fncubic-bezier(0.07, 1.04, 0.7, 0.9)
--switch-disabled-opacityvar(--pk-disabled-opacity)
--switch-loading-size20px
Last Updated:
Contributors: yranky
Prev
DatePicker 日期时间选择器
Next
Field 输入项