Components · 通用组件
Checkbox Interactions
四种复选框反馈共用同一套表单与无障碍契约,通过 effect 切换描边、波纹、Material 状态层或果冻形变。
Overview
AnimatedCheckbox 使用透明的原生 input[type='checkbox'] 承担表单、键盘和辅助技术语义,装饰元素只负责视觉表现。每种效果都补齐了键盘焦点、部分选中、禁用状态、44px 最小点击高度和减少动画支持。
| Effect / 效果 | Feedback / 反馈 | Source / 来源 |
|---|---|---|
stroke(描边) | 方框轮廓让出缺口并绘制勾线 | Andrew Manzyk |
ripple(波纹) | 选中波纹扩散,随后绘制勾线 | vishnupprajapat |
material(Material) | 悬停、焦点和按压使用圆形状态层 | lenin55 |
jelly(果冻) | 选中时依次压缩、拉伸并回弹 | cssbuttons-io |
Demo
Code
vue
<script setup lang="ts">
import { ref } from 'vue'
import { AnimatedCheckbox } from '@/library/web/components/checkbox-interactions'
const enabled = ref(false)
const partiallySelected = ref(true)
</script>
<template>
<AnimatedCheckbox
v-model="enabled"
v-model:indeterminate="partiallySelected"
effect="ripple"
name="notifications"
value="product-updates"
label="接收产品更新"
/>
</template>API
AnimatedCheckbox
| Prop / 字段 | Type / 类型 | Default / 默认值 | Description / 中文含义 |
|---|---|---|---|
effect(动效类型) | stroke | ripple | material | jelly | stroke | 选择复选框的视觉反馈方式 |
modelValue(选中值) | boolean | false | 当前是否选中,通过 v-model 双向绑定 |
label(标签) | string | required | 可见标签;未提供插槽时也作为控件名称 |
indeterminate(部分选中) | boolean | false | 显示混合状态,可通过 v-model:indeterminate 控制 |
disabled(禁用) | boolean | false | 禁止操作并显示禁用状态 |
id(元素标识) | string | auto | 原生输入框 ID;默认自动生成 |
name(表单字段名) | string | — | 原生表单提交使用的字段名 |
value(表单字段值) | string | number | — | 选中后提交的原生表单值 |
required(必选) | boolean | false | 启用原生表单必选校验 |
| Event / 事件 | Payload / 参数 | Description / 中文含义 |
|---|---|---|
update:modelValue(更新选中值) | boolean | 选中状态发生变化时触发 |
update:indeterminate(更新部分选中) | boolean | 用户操作混合状态时触发 false |
change(状态变化) | boolean, Event | 返回新状态和原生事件 |
根元素上的其他 attributes 会透传给外层 label。标签内容可通过默认插槽替换。
Project Design 可以覆盖:
scss
--vd-checkbox-color
--vd-checkbox-accent
--vd-checkbox-focus
--vd-checkbox-duration
--vd-checkbox-size
--vd-checkbox-stroke-width其中 --vd-checkbox-size(复选框尺寸)默认是 20px,--vd-checkbox-stroke-width(线条粗细)默认是 2px。
Behavior
- 点击标签、触摸或在键盘焦点下按空格键都可以切换状态。
modelValue是受控状态,组件通过事件通知父级更新,不在内部保存业务数据。- 用户操作部分选中状态时,同时清除
indeterminate并更新选中值。 - 禁用状态保留原生
disabled行为,并移除可交互指针。 - 系统启用减少动画时,描边、波纹和形变效果立即完成,状态仍然可辨认。
Notes
- 动画只增强状态反馈,原生 checkbox 语义和可见标签仍然是必要信息。
- 大批量筛选和密集表格应优先使用
material或减少动效持续时间。 - 四种效果均为 Uiverse HTML + CSS 样例的独立 Vue 3 适配。
- 原样例均标注 MIT 许可证,来源和版权说明记录在项目的
THIRD_PARTY_NOTICES.md。