Skip to content

ColorPicker 颜色选择器

可视化挑选颜色,支持 HEX / RGB / HSB 三种格式显示,alpha 透明度,预设色板,和受控/非受控两种模式。基于浏览器 Pointer Events 实现 SV / hue / alpha 三段拖拽,零外部颜色库依赖。

基本使用

v-model 绑定 hex 字符串。alpha < 1 时输出 8 位 hex(如 #1677ff80),否则输出 6 位。

显示格式

format 切换 swatch 旁的文本显示格式(不影响 v-model 输出,输出始终是 hex)。

关闭 alpha

disabled-alpha 关掉透明度滑块,强制 alpha=1,输出始终是 6 位 hex。

预设色板

presets 在面板上方显示预设色,点击直接套用。最简单形态是 hex 字符串列表。

分组预设 / 带标签

presets 也接受 { label?, colors }[] 分组形态。colors 内每一项可以是 hex 字符串,也可以是 { color, label? } 对象(label 会写入按钮的 aria-label / title,便于无障碍)。

自定义面板 panel slot

panel slot 完全接管面板内容,scope 提供 { color, components },其中 components.picker / components.presets / components.footer 是渲染函数 —— 可以按需调用、重新排版、外面套自己的说明区。下例把预设放到拾色器右侧,并在底部追加一段提示。

三种尺寸

禁用

表单联动

放进 c-form-item 内时,status 会自动跟随 FormItem 的校验状态。

弹层容器

把面板挂到 document.body 或自定义容器,避开 overflow 滚动裁切。

Variants

录入组件统一 variant 形态。四档:outlined(默认)/ filled / borderless / underlined

API

Props

参数类型默认值说明
modelValuestringnull--
defaultValuestring#1677ff非受控初始 hex 值
format'hex' | 'rgb' | 'hsb''hex'swatch 文本显示格式(不影响 v-model 输出)
disabledbooleanfalse是否禁用
size'small' | 'default' | 'large''default'trigger 尺寸
status'' | 'error' | 'warning' | 'success' | 'validating'''校验状态;置于 FormItem 时自动继承
showTextbooleanfalse是否在 swatch 旁显示色值文本
disabledAlphabooleanfalse关闭 alpha 滑块,强制 alpha=1,输出 6 位 hex
presetsArray<string | { color, label? } | { label?, colors }>[]预设色板。可传扁平 hex 列表、单色对象列表,或 { label?, colors } 分组列表
placement'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight''bottomLeft'浮层方位
popupClassNamestring--浮层根元素自定义 class
popupAppendToBodybooleanfalse是否把浮层 Teleport 到 document.body
getPopupContainer(trigger: HTMLElement | null) => HTMLElement | null--自定义浮层挂载点,优先级高于 popupAppendToBody
transitionNamestringccui-color-picker-fade浮层过渡名
allowClearbooleanfalse是否允许清空(显示 × 按钮,emit null)

Slots

名称作用域说明
trigger{ color: string, open: boolean, disabled: boolean }自定义触发器,替代默认 swatch 按钮
panel{ color: string, components: { picker: () => VNode, presets: () => VNode | null, footer: () => VNode | null } }自定义面板内容;components.* 为面板各子片段的渲染函数,可按需调用、重新排版
footer{ color: string }面板底部追加区。默认面板:放在 picker 之后渲染;panel slot 内:通过 components.footer() 调用

Events

事件名回调签名触发时机
update:modelValue(hex: string)颜色变化时(hex 字符串,alpha<1 时 8 位)
change(hex: string, info: { rgb: RGB; hsv: HSV })颜色变化时(同 update:modelValue)
open-change(open: boolean)浮层打开 / 关闭时

键盘导航

面板内 SV 区域、hue 滑块、alpha 滑块均支持 tabindex=0 聚焦和方向键微调:

区域按键操作
SVArrow Right/Left饱和度 ±1(Shift ±10)
SVArrow Up/Down明度 ±1(Shift ±10)
HueArrow Right/Left/Up/Down色相 ±1(Shift ±10)
AlphaArrow Right/Left/Up/Down透明度 ±0.01(Shift ±0.1)

Released under the MIT License.