- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 2025年期中考试总结领导发言稿(28篇).docx
- 数学教学计划范文(28篇).docx
- 保姆雇佣的合同(33篇).docx
- 员工发言稿简洁(10篇素材参考).docx
- 青年五四演讲稿精选5篇.docx
- 企业个人安全培训心得(优秀10篇).docx
- vue中$refs的三种用法解读.docx
- 经营工作计划范文集合(29篇).docx
- 安全教育教案小班教案6篇.docx
- 校园后勤部年终工作总结范文(28篇).docx
- 2024年11月汕头市直机关遴选公务员面试真题附解析.docx
- 2024年11月市辖县直机关遴选公务员面试真题附详细解析.docx
- 2023年9月衡阳市直遴选面试真题回忆版.docx
- 2023年9月聊城市直机关遴选公务员面试真题带答案详解.docx
- 2024年11月嘉兴市直机关遴选公务员面试真题带详细解析.docx
- 2024年11月天津市直机关遴选公务员面试真题带详解.docx
- 2023年9月驻马店市直机关遴选公务员面试真题附详解.docx
- 2024年2月河南省直机关遴选公务员面试真题带题目详解.docx
- 2023年9月阿克苏地区直机关遴选公务员面试真题带答案详解.docx
- 2023年9月汉中市直机关遴选公务员面试真题带详细解析.docx
文档评论(0)