该死的颜色选择器!!
发布于 4 年前 作者 rtian 4498 次浏览 来自 分享

目标

看到这个很酷的网站 所以也想看看怎么弄?

先来挑战入门版…

颜色坐标系

首先要解决一个 误解



![](https://image.wxopen.club/content_cca30b5c-3165-11eb-902b-001a7dda7111.gif)



我们所看到的颜色面板, 其实就是一个固定的样式, 而我们获取的颜色其实是从 坐标模型中 计算出来的。
坐标模型有很多, 在此使用的是 <a href="https://baike.baidu.com/item/HSV%E9%A2%9C%E8%89%B2%E6%A8%A1%E5%9E%8B/21501482" rel="noopener" target="_blank">HSV颜色模型</a>



Q: 为什么使用 HSV ?  
A: HSV色系对用户来说是一种直观的颜色模型, 主要由 __色调(Hue, 简H)、饱和度(Saturation, 简S)、色明度(Value, 简V)__
将 HSV六角锥体模型 转为 直观的数学坐标系



![](https://image.wxopen.club/content_cccd3e1c-3165-11eb-b223-001a7dda7111.png)



__需要注意, document中元素节点 坐标原点是右上角, 而数学坐标原点为右下角__



__数学坐标系: y、x、h__



__HSV坐标系: v、s、h__
确认坐标系的范围



__色调H: 取值范围为0°~360°__



__饱和度S:取值范围为0.0~1.0__



__亮度V:取值范围为0.0(黑色)~1.0(白色)__



__通过document节点上元素的宽高, 计算步长, 达到取值范围为 0~100(转为百分制)__

颜色转换

通过 触摸 坐标系 获取 y(v)、x(s)、h 的值, 然后利用算法公式转换成 rgb 颜色

<a href="https://www.rapidtables.com/convert/color/hsv-to-rgb.html" rel="noopener" target="_blank">hsv转rgb公式</a>
<a href="https://www.rapidtables.com/convert/color/rgb-to-hsv.html" rel="noopener" target="_blank">rgb转hsv公式</a>
还有 rgb转hex、 rgb转hsl; 都在<a href="https://www.rapidtables.com/convert/color/" rel="noopener" target="_blank">这里</a>

实例用法

详细注释在 代码中…

1. 将 colorPicker 组件 引入到项目中。

// index.json

{
  "usingComponents": {
    "color-picker": "../../components/colorPicker/colorPicker"
  }
}

// index.html

<view>

 <color-picker></color-picker>

</view>

2. Attributes

属性 类型 默认值 必填 说明
width number 35 宽度; 单位px
height number 35 高度; 单位px
predefined string #409EFF 预览颜色; 支持HEX和RGB; 只支持英文字符

3. Events

事件名称 回调参数 说明
change 当前颜色 当修改绑定值时触发

4. 示例

参考文献

MakerGYT 看了MakerGYT写的mini-color-picker源码, 非常强🤙🤙🤙

颜色公式转换

在线测试工具,校验计算是否正确

hsv百度百科

Element的color-picker

1 回复

666,第一个动图我还以为是input的type等于color

回到顶部