Skip to content

ColorMode 颜色模式 ​

ewColorPickerColorMode 提供 Hex / RGB / HSL 三种输入模式。切换后底部输入区会重建为对应的分通道输入组。

项值
包@ew-color-picker/color-mode
pluginNameewColorPickerColorMode
applyOrderPost
挂载点panelContainer
访问实例core.plugins.ewColorPickerColorMode

配置项 ​

配置类型默认值说明
defaultMode'hex' | 'rgb' | 'hsl'有 Alpha 时 'rgb',否则 'hex'初始模式
showColorModebooleantruefalse 时不渲染模式切换器
ewColorPickerColorModeboolean | objecttruefalse 等价于关闭;对象会合并进插件配置
changeMode(mode, picker) => void—模式切换回调

默认模式为什么是 RGB?

当 Alpha 插件存在时,颜色天然是 rgba(),因此默认进入 rgb 模式更符合直觉;没有 Alpha 时默认 hex。

实例方法 ​

ts
const colorMode = picker.plugins.ewColorPickerColorMode
方法 / 属性签名说明
getCurrentMode() => 'hex' | 'rgb' | 'hsl'读取当前模式
setMode(mode) => void切换模式(内部防抖 100ms)
switchToNextMode() => void循环到下一个模式:hex → rgb → hsl → hex
switchToPreviousMode() => void循环到上一个模式
onModeChange(mode) => void模式变更主逻辑:更新显示、重建输入、执行回调、触发事件
updateOptions() => void重新读取配置并重绘
updateInputStructure() => void按当前模式重建输入区
updateInputValues(color: string) => void把颜色同步到当前模式的输入框
updateColorFromRgbInputs() => void从 RGB 输入框合成颜色并改色(防抖)
updateColorFromHslInputs() => void从 HSL 输入框合成颜色并改色(防抖)
restoreDefaultInput() => void恢复 Input 插件的默认输入框
currentMode'hex' | 'rgb' | 'hsl'当前模式
modeContainerHTMLElement | null模式切换器根节点

切换模式 ​

ts
picker.plugins.ewColorPickerColorMode.setMode('rgb')
picker.plugins.ewColorPickerColorMode.switchToNextMode()

模式切换行为 ​

text
点击上/下箭头
   → debounce(100ms) onModeChange(mode)
   → 更新模式文本(HEX / RGB / HSL)
   → updateInputStructure() 重建输入区
   → 非 hex 模式:updateInputValues(当前颜色)
   → options.changeMode?.(mode, picker)
   → trigger('mode-change', mode)

Hex 模式下不会再次调用 setColor,避免把输入框里的 #xxxxxx 覆盖成 rgba()/hsla() 字符串。

禁用状态 ​

上/下箭头点击时会检查 options.disabled,禁用状态下不响应。

事件与回调 ​

来源签名说明
options.changeMode(mode, picker) => void模式切换后
事件 mode-change(mode)模式切换后
ts
picker.on('mode-change', (mode) => {
  console.log('当前模式:', mode) // 'hex' | 'rgb' | 'hsl'
})

DOM 结构 ​

html
<!-- 模式切换器 -->
<div class="ew-color-picker-mode-container">
  <button class="ew-color-picker-mode-up-btn" type="button" title="上一个模式"></button>
  <div class="ew-color-picker-mode-text">HEX</div>
  <button class="ew-color-picker-mode-down-btn" type="button" title="下一个模式"></button>
</div>

<!-- RGB/HSL 模式下的输入组 -->
<div class="ew-color-picker-inputs-group">
  <div class="ew-color-picker-inputs-col">
    <label class="ew-color-picker-input-label">R</label>
    <div class="ew-input-number">…</div>
  </div>
  <!-- G / B / A 或 H / S / L / A -->
</div>
类名说明
.ew-color-picker-mode-container模式切换器
.ew-color-picker-mode-up-btn / -down-btn上/下切换按钮
.ew-color-picker-mode-text模式文本
.ew-color-picker-inputs-group分通道输入组
.ew-color-picker-inputs-col单个通道列
.ew-color-picker-input-label通道标签
.ew-color-picker-input-container-flexHex 模式的输入容器
.ew-color-picker-input / .ew-color-picker-input-default默认输入框

完整示例 ​

ts
const picker = new ewColorPicker({
  el: '#app',
  defaultColor: '#ec4899',
  defaultMode: 'hex',
  showColorMode: true,
  changeMode: (mode, instance) => {
    console.log(`切换到 ${mode},当前色 ${instance.getColor()}`)
  },
})

picker.on('mode-change', (mode) => {
  if (mode === 'hsl') {
    // HSL 模式下可以读取 hsvaColor 做进一步处理
    console.log(picker.hsvaColor)
  }
})

相关 ​