2019独角兽企业重金招聘Python工程师标准>>>

一切尽在注释中

html节点

<div id="colorpicker" style="display:inline-block;"><input class="color-value" type="text" value="#ffffff" /><div class="canvas-box" style="display:none;padding:10px;border:1px solid #ccc;"><canvas id="canvas" style="cursor:crosshair;">你的浏览器不支持canvas.</canvas></div>
</div>

jscolor.js

/*** code by lonelydawn 161226* color picker 拾色器* need jQuery >= v1.10.2*/// 1 鼠标点击      click=getMixedColor() 十进制 getHexColor 十六进制// 2 获取鼠标位置  getPos();// 3 计算点击位置代表的两个色度  getColorTop/getColorBottom(pos)  pos :x || y// 4 根据两个色度计算出叠加色度  getMixedColor(color1,color2)// & 绘制色谱// & 10进制色值转16进制色值// & // 创建拾色器
var createColorPicker=function(){var canvass=$("#canvas");  //获取的是属性集合 [canvas#canvas,context:document,selector:"#canvas"]var canvas=$("#canvas")[0];// 获取canvas上下文环境  for 2dvar getContext=function(width,height){canvas.width=width;canvas.height=height;return canvas.getContext("2d");};//绘制色谱var drawBackground=function(ctx,width,height){// 初始清空绘图区域ctx.clearRect(0,0,width,height);// 绘制水平全色渐变var hGrad=ctx.createLinearGradient(0,0,width,0);hGrad.addColorStop(0 / 6, '#F00');  //  x       r               g               bhGrad.addColorStop(1 / 6, '#FF0');   //1  - 30   255             x/30*255        0hGrad.addColorStop(2 / 6, '#0F0');   //31 - 60   (60-x)/30*255   255             0hGrad.addColorStop(3 / 6, '#0FF');   //61 - 90   0               255             (x-60)/30*255hGrad.addColorStop(4 / 6, '#00F');   //91 -120   0               (120-x)/30*255  255hGrad.addColorStop(5 / 6, '#F0F'); //121-150   (x-120)/30*255  0               255hGrad.addColorStop(6 / 6, '#F00'); //151-180   255             0               (180-x)/30*255ctx.fillStyle=hGrad;ctx.fillRect(0,0,width,height);// 绘制垂直白色透明度渐变var vGrad=ctx.createLinearGradient(0,0,0,height);vGrad.addColorStop(0, 'rgba(255,255,255,0)');   //  y       r   g   b       αvGrad.addColorStop(1, 'rgba(255,255,255,1)');    //1-100     255 255 255     y/100ctx.fillStyle=vGrad;ctx.fillRect(0,0,width,height);};//获取上层图层色道var getColorTop=function(y){return{r : 255,g : 255,b : 255,a : y/100};};//获取下层图层色道var getColorBottom=function(x){var r=255,g=255,b=255;if(x>0 && x<=30){r=255;g=x/30*255;b=0;}else if(x>30 && x<=60){r=(60-x)/30*255;g=255;b=0;}else if(x>60 && x<=90){r=0;g=255;b=(x-60)/30*255;}else if(x>90 && x<=120){r=0;g=(120-x)/30*255;b=255;}else if(x>120&& x<=150){r=(x-120)/30*255;g=0;b=255;}else if(x>150&& x<=180){r=255;g=0;b=(180-x)/30*255;}else return null;return {r:r,g:g,b:b};};/*** C=α*A+(1-α)*B  单色道的混合计算公式* α为A层(上层)的不透明度* 本节的A层是垂直渐变色区域*/var getMixedColor=function(cTop,cBtm){var r= Math.floor(cTop.r*cTop.a+(1-cTop.a)*cBtm.r),g= Math.floor(cTop.g*cTop.a+(1-cTop.a)*cBtm.g),b= Math.floor(cTop.b*cTop.a+(1-cTop.a)*cBtm.b);var value="rgba("+r+","+g+","+b+",1);";return{r: r,g: g,b: b,value:value};};//获取十六进制颜色字符串,如 #999999var getHexColorString=function(c){var cStr="#";// 将单位色度值转换为字符var getChar=function(value){// var c='';// switch(value){//    case 10://  case 11://  case 12://  case 13://  case 14://  case 15://      c=String.fromCharCode(value+87);//        break;//    default://      c=value.toString();//      break;// };// return c;return "0123456789abcdef"[value];};// 将单通道色度值转换为字符串var passToStr=function(value){ //255var pre=Math.floor(value/16);var back=value%16;return getChar(pre)+getChar(back);};return cStr+passToStr(c.r)+passToStr(c.g)+passToStr(c.b);};// 事件入口var enter=function(event){var ev=event || window.event;var rect = canvas.getBoundingClientRect();var x= ev.clientX - rect.left * (canvas.width / rect.width);var y= ev.clientY - rect.top * (canvas.height / rect.height);var cDec = getMixedColor(getColorTop(y),getColorBottom(x));var cHex = getHexColorString(cDec);exit(cHex);};// 事件出口var exit=function(color){$(".color-value").val(color);$(".color-value").css("background",color);};// colorpicker && 初始化var create=function(w, h){// initvar width  = w || 180;var height = h || 101;var ctx=getContext(width, height);drawBackground(ctx,width,height);// 绑定事件入口canvass.bind("click",enter);};// 解绑事件  不解绑事件的后果:每次create都会为节点绑定事件,一次触发多次执行var destroy=function(){canvass.unbind("click");};return {create:create,destroy:destroy};
};// 统治所有的 mouseenter & mouseleave 事件
// 如果在mouseenter作用域内创建,则需要在mouseleave作用域删除
var cp=new createColorPicker();/*
// 拾色器显示开关
$('#colorpicker').click(function(){console.log("over");// $("#colorpicker .canvas-box").css("display","block");if(boxs==0){$("#colorpicker").append("<div class='canvas-box' style='display:none;padding:10px;border:1px solid #ccc;'>"+"<canvas id='canvas' style='display:crosshair;'>你的浏览器不支持canvas.</canvas>"+"</div>");boxs++;}$("#colorpicker .canvas-box").css("display","block");cp.create();
});
$('#colorpicker').mouseleave(function(){console.log("out");// $("#colorpicker .canvas-box").css("display","none");$("div").remove(".canvas-box");if(boxs>0) boxs--;cp.destroy();
});
*/// 拾色器显示开关
$("#colorpicker").mouseenter(function(){$("#colorpicker .canvas-box").css("display","block");cp.create();
});$("#colorpicker").mouseleave(function(){$("#colorpicker .canvas-box").css("display","none");cp.destroy();
});// 判断字符串是否是7位颜色字符串
var isColorStr=function(color){// 判断字符是否存在于字符串var charInStr=function(ch,str){// 如果字符串中存在与字符相等的,返回truefor(var i=0;i<str.length;i++)if(ch==str[i])return true;// 遍历结束,还没有与字符相等的,返回falsereturn false;};if(color.length!=7 || color[0]!="#")return false;color=color.toLowerCase();for(var i=1;i<color.length;i++){if(!charInStr(color[i],"0123456789abcdef"))return false;}return true;
}// 输入框输入字符串若符合颜色格式,则取其值
$("#colorpicker .color-value").keyup(function(){var input=$("#colorpicker .color-value");console.log(input.val());if(isColorStr(input.val()))input.css("background",input.val());
});

测试结果: (鼠标指针形状 crosshair, 截图时隐藏了)

chrome

        

firefox

             

IE 9及以上

              

转载于:https://my.oschina.net/lonelydawn/blog/813284

绚丽的javascript拾色器(不兼容IE8及以下)相关推荐

  1. 一款免安装、多平台兼容的 拾色器(Color Picker)

    文章目录 视频教程 场景需求 场景 需求 Chrome Google DevTools 中的 拾色器 用法 其他浏览器 视频教程 浏览器自带的拾色器ColorPicker使用 场景需求 场景 我是一个 ...

  2. 拾色器 插件 Farbtastic

    基本用法 1.引入 farbtastic.js 和 farbtastic.css(注:基于jquery的,先把jquery引进去,css包含三张图别忘了设置正确路径,不然只能看到一个方块) <s ...

  3. 原生js实现的拾色器插件 - ColorPicker

    对一个前端来说,颜色选择的插件肯定不陌生,许多小伙伴对这类插件的实现可能会比较好奇.这里奉上原生js版本的拾色器,由于是本人纯手工撸出来的,所以转载还请标明来源. 效果图: 讲下实现方式: 1.颜色除 ...

  4. 颜色拾色器 Flexi

    Flexi是一个简单.轻量级颜色拾色器,基于SVG/VML技术实现.它没有基于依赖任何JavaScript框架开发,能够将选中的颜色以hexadecimal.HSV.RGB三种格式返回.选择器的尺寸. ...

  5. 原生js制作简易DOM拾色器实例教程

    本教程的目的是为了帮助初学者更好的掌握DOM和数组相关操作,实例效果如下图所示. 可以看到实例中的拾色器分为三个部分:拾色区域.色系区域.显示颜色区域.先写出这三个部分的html代码,如下所示: &l ...

  6. 安卓自定义时间选择器_微信小程序拾色器(颜色选择器)组件

    点击上方"极客小寨",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 大家好,我是独立开发者东东,如今在web项目中不少地方需要用到颜色选择器,比如设置 ...

  7. UE4拾色器的实现,使用UE4自带的SColorPicker

    我就奇怪了,csdn搞个资源这么难?链接: https://pan.baidu.com/s/1sn70iyT6mp89xmsgUVmDxg 提取码: 2yk2 这总有了吧(2020年7月3日22:14 ...

  8. PS学习笔记——拾色器和色彩空间

    作为绘图.修改.色彩调整的基础,拾色器是一个非常重要的工具.如果颜色不存在于画面上或图像内,而是需要人为设定,就需要使用拾色器. 位于工具面板下方,可以看到前景色/背景色选项.或者可以打开色板面板和颜 ...

  9. vue吸管拾色器、利用canvas获取坐标点颜色、canvas获取坐标点颜色图片跨域、图片转base64、colorPicker

    vue吸管拾色器.利用canvas获取坐标点颜色.canvas获取坐标点颜色图片跨域.图片转base64.colorPicker 1.需求:表格中主颜色和次颜色是需要从缩略图上吸取颜色,然后渲染色块, ...

  10. Python3制作鼠标拾色器并显示十六进制数值(有单独窗口显示取色)

    Python3制作鼠标拾色器并显示十六进制数值(有单独窗口显示取色) 代码如下,结合OpenCV的鼠标事件,窗体大小的调整,我们可以轻松地制作拾色器并进行显示: import cv2import nu ...

最新文章

  1. Android KTV
  2. 原创 | 入门“大数据”,你需要通读这18本书
  3. linux提示密码没有凑效,陈连福的生信博客 | 第16期培训班将于2021.01.23-2021.02.01期间在武汉市举办,提前报名有有优惠!...
  4. Eclipse保存验证JS缓慢
  5. jdbc远程连接mysql url_jdbc连接mysql之url书写
  6. OpenCV--读取图像中任意点的像素值,并显示坐标
  7. Web存储—获取Cookie
  8. 记录——《C Primer Plus (第五版)》第七章编程练习第八题
  9. 4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」
  10. Linux C编程与Shell编程在开发实用工具方面的相同点总结
  11. mybaties知识点整理与SSM
  12. html5化妆品网站源码,织梦响应式化妆美妆品类展示网站模板dedecms移动手机端HTML5自适应整站源码...
  13. php网站微博帐号登录代码,微博登录按钮
  14. 通过池塘配置ip实验
  15. [原创]我的网名卖烧烤的鱼缘由^_^
  16. 第二章 计算机系统和计算机组成原理
  17. 数据科学猫:数据分析的主要类型、描述性分析、预测性分析与规范性分析
  18. 计算机控制 英文 论文,计算机论文英文翻译
  19. 麦客CEO李卉:实践证明肯钻营的“小而美”亦动人|企服三会系列报道
  20. 跑语义分割程序时报错

热门文章

  1. iOS 如何把图片资源打包成bundle文件及遇到的坑(详解)
  2. mysql视图的更新 条件_MySQL进阶16 - 视图的创建/修改/删除/更新--可更新性的不适用条件...
  3. python面向对象使用方法_python面向对象之方法
  4. python初学者编程指南源码_适合新手的开源项目(Python 篇)
  5. Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK
  6. ES6学习笔记八(数值的扩展)
  7. g++: command not found
  8. 以自己范例,说明如何写操作文档
  9. LINUX使用C执行系统命令ping,读取执行结果的崩溃日志
  10. 正确修改LINUX SHELL的.bashrc,显示短路径