JavaScript快速实现一个颜色选择器.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

JavaScript快速实现一个颜色选择器

目录颜色模型HSV与HSL的区别实现选择器色相饱和度和明亮度hsv转rgb透明度基于HSL的颜色选择器使用canvas在做前端界面开发的时候,遇到需要改变颜色的需求,就需要使用颜色选择器。

针对这个问题,第一想法,自然是H5提供了inputcolor,可以实现。但不出意外的,IE并不支持。而且,chrome的实现方式和firefox也不太一样,见下图:

左图是chrome的,浏览器自身实现的一个颜色选择器控件;右图是firefox的,引入的是操作系统自带的颜色选择器控件。

鉴于这些差异性,就很有必要实现一个统一的颜色选择器组件,譬如我们来实现一个类似chrome浏览器自带的这种选择器。

要做这个组件,首先需要了解的一个知识点,就是颜色模型。

颜色模型

我们前端开发,最常见的颜色模型就是RGB,即红绿蓝三基色模型,而前端浏览器能支持颜色显示的颜色模型只有两种:RGB和HSL。

其中,RGB模型是以三色的值在0-255以内的范围内,混合成一种颜色,对机器较友好,但并不太适合人直观的进行颜色选择。所以,通常的颜色选择器一般会使用另外两种更面向视觉感知的模型:HSV和HSL。关于颜色模型的详细知识,可见颜色模型的基础知识。

而chrome浏览器自带的颜色选择器,就是基于HSV的。

HSV与HSL的区别

HSV是基于色相H(hue)、饱和度S(saturation)、明度V(Value);HSL基于色相H(hue)、饱和度S(saturation)、亮度L(lightness)。

其中色相是一样的,本质都是一种颜色值。

在这两个模型中,色相是以六大主色为基础,分别按60度的间隔排列在圆环上。

这六大主色分别是:0红、60黄、120绿、180青、240蓝、300洋红、360红。

而在前端进行布局设计时,常常把圆环处理成长方形的色块,通过颜色的线性渐变方式进行分段处理,角度换算成一定的比例,如下所示:

而饱和度和明亮度都是有区别的,为方便理解颜色选择器,本文概括简单的描述,如下:

HSV中的S饱和度,反映色相颜色中混入白色的值,呈现白色到色相(H)颜色的变化;HSL中的S饱和度,反映色相颜色中混入灰色的值,呈现的是一种从灰色到色相(H)颜色的变化。HSV中的V明度,体现的是从黑色到色相(H)颜色的过渡。HSL中的L亮度,体现的是从黑色到色相(H)颜色再到白色的过渡。

另外需要明确的是,各个部分的取值范围:Hue色相:0-360;饱和度和明亮度都是:0~100%。

具体的实现上的差别,我们可以接着往下看。

实现选择器

色相

色相的原理上面已经介绍了,HSV和HSL一样。落实到代码层面的话,也是很好实现的,以css和div的方式,只需要进行颜色的线性渐变即可:

div

!--色相柱--

divid=colorBar/div

!--滑动块--

divid=divSlider/div

/div

.div-bar{

position:relative;

width:10px;

height:200px;

margin-left:15px;

cursor:pointer;

.color-bar{

background:linear-gradient(180deg,#f00,#ff017%,#0f033%,#0ff50%,#00f67%,#f0f83%,#f00);

width:10px;

height:200px;

margin-left:20px;

.div-slider{

width:8px;

height:8px;

}

这里是竖向的色相柱,宽高10*200,如果需要横向的改动宽高布局即可。

计算色相柱的滑块位置

要想移动滑块获取位置信息,首先需要监听色相柱上的鼠标事件,具体如下:

colorBar.addEventListener(mousedown,function(e){

setHueSlider(e)

document.addEventListener(mousemove,setHueSlider)

document.addEventListener(mouseup,function(){

document.remove

文档评论(0)

183****9196 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档