功能需求
- 取色板可点击,长按移动,获取颜色
- 取色条拖动改变色相
- 可修改十六进制值,RGB,HSL,HSV值改变所有显示数据
- 用户输入的数据进行校验(十六进制自动补全;不正确的十六进制自动显示为黑色;rgb值的极限范围,S,V,L 小数点输入的实时校验并纠正)
主思路
三部分组成:取色板,取色条,输入框
hsv rgb hsl 三者关系
HSVL:
H: 色相,0°-360°,每隔60°有不同的主色相
S: 饱和度,0-100%,越低越灰暗
V: 明度,L: 亮度 0-100%
s随着水平轴的向右从0-1,v随着垂直轴的向上从0-1,所以可以用鼠标在取色板中的位置(width, height)与整个面板的width和height的比例求出(s, v),h值可根据在取色条上的高度,求出hsv值,再来个转换公式rgb,hsl也呼之欲出~
常规的取色器取色板和取色条的渲染 [ canvas ]
取色条渲染简单~,用canvas的apiaddColorStop
取色板看来得用个透明灰板加个主颜色渐变来渲染,不过要注意只要h发生变化,主颜色就会发生变化,所以得重新渲染主颜色层数据变化
触发更新的两种方法:
i. 通过拖动取色板或者取色条,通过get方法获取hsv等
ii. 通过改变输入板上的值,通过value方法获取hsv等
更新任务:- 更新数据渲染页面:
- 获取当前hsv rgb hsl值,
- 实时显示input中的值
- 实时显示当前颜色
- 更新渲染picker-panel 取色板
- 更新handle的background-color
- 更新handle的位置
取色板,取色条渲染
1 | ///先完成取色板,取色条的渲染 |
1 | ////取色板渲染 |
确定颜色坐标(HSV)
1 | ///通过取色条的位置与总高度比获取h |
HSV 转换成 RGB HSL
1 | var colorConvert = { |
输入数据的校验,用正则表达式处理
1 | InputPanel.prototype.dataFormat = function(e, id, value) { |
剩下的就主要是一些dom的事件绑定和数据的更新~
gif质量有点差哈哈,各位看官将就看吧~
附上源码
参考资料:
https://zh.wikipedia.org/wiki/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4