绚丽的javascript拾色器(不兼容IE8及以下)
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及以下)相关推荐
- 一款免安装、多平台兼容的 拾色器(Color Picker)
文章目录 视频教程 场景需求 场景 需求 Chrome Google DevTools 中的 拾色器 用法 其他浏览器 视频教程 浏览器自带的拾色器ColorPicker使用 场景需求 场景 我是一个 ...
- 拾色器 插件 Farbtastic
基本用法 1.引入 farbtastic.js 和 farbtastic.css(注:基于jquery的,先把jquery引进去,css包含三张图别忘了设置正确路径,不然只能看到一个方块) <s ...
- 原生js实现的拾色器插件 - ColorPicker
对一个前端来说,颜色选择的插件肯定不陌生,许多小伙伴对这类插件的实现可能会比较好奇.这里奉上原生js版本的拾色器,由于是本人纯手工撸出来的,所以转载还请标明来源. 效果图: 讲下实现方式: 1.颜色除 ...
- 颜色拾色器 Flexi
Flexi是一个简单.轻量级颜色拾色器,基于SVG/VML技术实现.它没有基于依赖任何JavaScript框架开发,能够将选中的颜色以hexadecimal.HSV.RGB三种格式返回.选择器的尺寸. ...
- 原生js制作简易DOM拾色器实例教程
本教程的目的是为了帮助初学者更好的掌握DOM和数组相关操作,实例效果如下图所示. 可以看到实例中的拾色器分为三个部分:拾色区域.色系区域.显示颜色区域.先写出这三个部分的html代码,如下所示: &l ...
- 安卓自定义时间选择器_微信小程序拾色器(颜色选择器)组件
点击上方"极客小寨",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 大家好,我是独立开发者东东,如今在web项目中不少地方需要用到颜色选择器,比如设置 ...
- UE4拾色器的实现,使用UE4自带的SColorPicker
我就奇怪了,csdn搞个资源这么难?链接: https://pan.baidu.com/s/1sn70iyT6mp89xmsgUVmDxg 提取码: 2yk2 这总有了吧(2020年7月3日22:14 ...
- PS学习笔记——拾色器和色彩空间
作为绘图.修改.色彩调整的基础,拾色器是一个非常重要的工具.如果颜色不存在于画面上或图像内,而是需要人为设定,就需要使用拾色器. 位于工具面板下方,可以看到前景色/背景色选项.或者可以打开色板面板和颜 ...
- vue吸管拾色器、利用canvas获取坐标点颜色、canvas获取坐标点颜色图片跨域、图片转base64、colorPicker
vue吸管拾色器.利用canvas获取坐标点颜色.canvas获取坐标点颜色图片跨域.图片转base64.colorPicker 1.需求:表格中主颜色和次颜色是需要从缩略图上吸取颜色,然后渲染色块, ...
- Python3制作鼠标拾色器并显示十六进制数值(有单独窗口显示取色)
Python3制作鼠标拾色器并显示十六进制数值(有单独窗口显示取色) 代码如下,结合OpenCV的鼠标事件,窗体大小的调整,我们可以轻松地制作拾色器并进行显示: import cv2import nu ...
最新文章
- Android KTV
- 原创 | 入门“大数据”,你需要通读这18本书
- linux提示密码没有凑效,陈连福的生信博客 | 第16期培训班将于2021.01.23-2021.02.01期间在武汉市举办,提前报名有有优惠!...
- Eclipse保存验证JS缓慢
- jdbc远程连接mysql url_jdbc连接mysql之url书写
- OpenCV--读取图像中任意点的像素值,并显示坐标
- Web存储—获取Cookie
- 记录——《C Primer Plus (第五版)》第七章编程练习第八题
- 4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」
- Linux C编程与Shell编程在开发实用工具方面的相同点总结
- mybaties知识点整理与SSM
- html5化妆品网站源码,织梦响应式化妆美妆品类展示网站模板dedecms移动手机端HTML5自适应整站源码...
- php网站微博帐号登录代码,微博登录按钮
- 通过池塘配置ip实验
- [原创]我的网名卖烧烤的鱼缘由^_^
- 第二章 计算机系统和计算机组成原理
- 数据科学猫:数据分析的主要类型、描述性分析、预测性分析与规范性分析
- 计算机控制 英文 论文,计算机论文英文翻译
- 麦客CEO李卉:实践证明肯钻营的“小而美”亦动人|企服三会系列报道
- 跑语义分割程序时报错
热门文章
- iOS 如何把图片资源打包成bundle文件及遇到的坑(详解)
- mysql视图的更新 条件_MySQL进阶16 - 视图的创建/修改/删除/更新--可更新性的不适用条件...
- python面向对象使用方法_python面向对象之方法
- python初学者编程指南源码_适合新手的开源项目(Python 篇)
- Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK
- ES6学习笔记八(数值的扩展)
- g++: command not found
- 以自己范例,说明如何写操作文档
- LINUX使用C执行系统命令ping,读取执行结果的崩溃日志
- 正确修改LINUX SHELL的.bashrc,显示短路径