1. var myData = {
  2. canvas : document.getElementById('colors'),
    // context : myData.canvas.getContext('2d'); //这样做会导致程序出错,应该在函数中获取画布
  3. canvasColor : document.getElementById('color'),
  4. plus : document.getElementsByClassName('plusButton'),
  5. subtract : document.getElementsByClassName('subtractButton'),
  6.  
  7. red : document.getElementById('red'),
  8. green : document.getElementById('green'),
  9. blue : document.getElementById('blue'),
  10.  
  11. hue : document.getElementById('hue'),
  12. saturation : document.getElementById('saturation'),
  13. lightness : document.getElementById('lightness'),
  14. x:0,
  15. y:0
  16. };
  1. //这小段代码是设置RGB和HSL的增减,,点击后面的三角则值加减
    function setRGBorHSL(){
  2. var colorInput = document.getElementsByClassName('colorInput');
  3. var color;
  4. for(var i = 0;i < myData.plus.length/2;i++){
  5. myData.plus[i].dataset.index = i;//用到了自定义属性,是个小技能,因为前面的输入框的下标会直接跳到i最大的值,就是先循环后,再将i赋值给表单下标,所以给要绑定 事件的三角元素,绑定事件就会对相应的表单值进行加减操作
  6. myData.subtract[i].dataset.index = i;
  7. addEvent(myData.plus[i],'click',function(){
  8. var temp = colorInput[this.dataset.index].value;
  9. var hsl = [];
  10. temp = (temp > 254?temp:++temp);
  11. colorInput[this.dataset.index].value = temp;
  12. hsl = rgbToHsl(parseInt(myData.red.value),parseInt(myData.green.value),parseInt(myData.blue.value));
  13. color = '#'+parseInt(myData.red.value).toString(16)+parseInt(myData.green.value).toString(16)+ parseInt(myData.blue.value).toString(16);
  14. setColorBlock(color,false);
  15. myData.hue.value = hsl[0].toFixed(2);
  16. myData.saturation.value = hsl[1].toFixed(2);
  17. myData.lightness.value = hsl[2].toFixed(2);
  18.  
  19. })

RGB和HSL之间的转换

  1. //RGB转换为HSL
  2. function rgbToHsl(r, g, b){
  3. r /= 255, g /= 255, b /= 255;
  4. var max = Math.max(r, g, b), min = Math.min(r, g, b);
  5. var h, s, l = (max + min) / 2;
  6.  
  7. if(max == min){
  8. h = s = 0; // achromatic
  9. }else{
  10. var d = max - min;
  11. s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
  12. switch(max){
  13. case r: h = (g - b) / d + (g < b ? 6 : 0); break;
  14. case g: h = (b - r) / d + 2; break;
  15. case b: h = (r - g) / d + 4; break;
  16. }
  17. h /= 6;
  18. }
  19.  
  20. return [h, s, l];
  21. }
  22. //hsl转换为RGB
  23. function hslToRgb(h, s, l){
  24. var r, g, b;
  25.  
  26. if(s == 0){
  27. r = g = b = l; // achromatic
  28. }else{
  29. var hue2rgb = function hue2rgb(p, q, t){
  30. if(t < 0) t += 1;
  31. if(t > 1) t -= 1;
  32. if(t < 1/6) return p + (q - p) * 6 * t;
  33. if(t < 1/2) return q;
  34. if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
  35. return p;
  36. }
  37.  
  38. var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
  39. var p = 2 * l - q;
  40. r = hue2rgb(p, q, h + 1/3);
  41. g = hue2rgb(p, q, h);
  42. b = hue2rgb(p, q, h - 1/3);
  43. }
  44.  
  45. return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
  46. }

这个小东西主要用canvas

UI组件之色彩选择器的更多相关文章

  1. 这是一个比较全的Android UI 组件

     Android组件及UI框架大全 原文地址:http://blog.csdn.net/smallnest/article/details/38658593 Android 是目前最流行的移动操作系统 ...

  2. 1.引入必要的文件 2.加载 UI 组件的方式 4.Parser 解析器

    //引入 jQuery 核心库,这里采用的是 2.0 <scripttype="text/javascript"src="easyui/jquery.min.js& ...

  3. 微信小程序一:微信小程序UI组件、开发框架、实用库

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8079095.html 内容持续更新,维护中 邮箱 ...

  4. 微信小程序UI组件、开发框架、实用库...

    UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wema ...

  5. 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)

    Vue 资源典藏,包括:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和 ...

  6. 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity

    问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...

  7. Docz 用 MDX 写 React UI 组件文档

    Docz 用 MDX 写 React UI 组件文档 前言 为了提升开发效率,创建一套 UI 组件库是一种较为有效的方式之一:可以减少重复工作.提高可复用,所以现在越来越多团队开始创建自己的 UI 组 ...

  8. vue.js相关UI组件收集

    内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 ###UI组件 element ★9689 - 饿了么出品的Vue2的web UI工具套件 Vux ★6927 - 基于Vu ...

  9. 交互设计:隐藏或显示大段文本的UI组件有哪些?

    应用场景: 在手机上要给列表中的每一项添加一个大段的介绍,应该用什么UI组件 A: 这里可以用,模态对话框,弹出提示,工具提示这类组件.模态对话框的好处,就是用关闭的按钮,用户操作方便:而弹出提示和工 ...

随机推荐

  1. JavaScript编程艺术-第6章(JavaScript美术馆改进版)代码

    基于[第4章(JavaScript美术馆)代码]进行改进(***HTML与JS分离***) (*亲测可用) HTML: JS: CSS:

  2. git修改push的注释信息

    修改还未push的注释: git commit --amend 修改后保存退出. 刚刚push到远端还没有人其他人下载或改动的: git commit --amend进入修改页面修改注释信息,修改后: ...

  3. Python字符串对象常用方法

    安利一句话:字符串是不可变的对象,所以任何操作对原字符串是不改变的! 1.字符串的切割 def split(self, sep=None, maxsplit=-1): # real signature ...

  4. 贪心 Codeforces Round #109 (Div. 2) B. Combination

    题目传送门 /* 贪心:按照能选的个数和点数降序排序,当条件不符合就break,水题啊! */ #include <cstdio> #include <algorithm> # ...

  5. solr之~模糊查询【转】

    solr之~模糊查询 有的时候,我们一开始不可能准确地知道搜索的关键字在 Solr 中查询出的结果是什么,因此,Solr 还提供了几种类型的模糊查询.模糊匹配会在索引中对关键字进行非精确匹配.例如,有 ...

  6. NGUI利用深度测试实现新手引导遮罩

    实现原理:实际上就是先利用渲染队列渲染,然后再利用ZTest,改变渲染的遮挡关系. PS:Depth Testing:深度测试,也叫深度缓冲.只有最靠近观察者的物体会被绘制.深度即Z,该值越小表示离观 ...

  7. No rule to make target ...

    在编译一个Android上的jni的时候出现了如下的问题 make[3]: *** No rule to make target `/home/zhang/android1/src/androidpk ...

  8. asterisk-java ami4 一些基本功能的例子

    比如:挂机,拨号,拨外线,保留通话,示闲,示忙等等.... 在api中可以获得这些方法说明 /**  * 给分机挂机  * @param Extension 要挂机的分机号  * @return  * ...

  9. PHP自定义函数及内部函数考察点

    变量的作用域和静态变量 变量的作用域 变量的作用域也称变量的范围,变量的范围即它定义的上下文背景(也是它的生效范围).大部分的PHP变量只有一个单独的范围.这个单独的范围跨度同样包含了include和 ...

  10. CHECKPOINT - 强制一个事务日志检查点

    SYNOPSIS CHECKPOINT DESCRIPTION 描述 预写式日志(Write-Ahead Logging (WAL))缺省时在事务日志中每隔一段时间放一个检查点. (要调整这个原子化的 ...