或者你和我一样,一开始对于如何去做一个调色板毫无思路。尤其在看到网上以及工具中各种形形色色的调色板后,更加不知所措。其实说到调色板,在html5中已经新增了获取颜色类型的文本框,即只需要一个 <input type=”color”/>
,然后再获取input的值即可,你可以 点此 来更多的了解这个新增元素,由于是html5元素,因此只有chrome和firefox能支持。自然,这个颜色文本框不是本篇所讨论的内容。
生成调色板
调色板主要的内容分为颜色格式和颜色种类。在web中常用的几种颜色格式主要有六位的十六进制、RGB以及HSL,在这里我们采用最普遍的十六进制。那么颜色种类呢,在调色板中显示多少种颜色才合适呢?还有这些颜色之间有什么内在的关系?这些都是接下来需要解决的问题。
我们不妨打开一个有选取颜色功能的代码编辑器。我们就暂且拿Dreamweave说事吧!这也是我最初做前端时用的编辑器。当我们选取颜色时,会看到一个这样的界面:
经过几次鼠标经过以及颜色的读取,我们发现一个这样的规律:
也就是说,从第四列开始,可以把剩下的列分成6个含有6*6种颜色的色块,这六个色块自左向右,自上而下排列,每个色块的基础色调分别是以 0,3,6,9,c,f 。我们知道,三个数值就能组成一种颜色,假设 colorBaseArr = [“0”,”3”,”6”,”9”,”c”,”f”],那么每个色块中的颜色值是由 基础色调+ colorBaseArr的双重循环。
主要的html代码如下:
<div class="color-panle"> <div class="color-read"> <span class="color-val"></span> <span class="color-show"></span> </div> <div class="color-list"></div> </div>
|
.color-val 的span用于显示颜色值,而.color-show的span则用于预览颜色。接下来,我们在.color-list中填充颜色列表,假定每个色块为一个ul,那么每个ul中就有6*6个li:
var colorBaseArr = ["0","3","6","9","c","f"]; var createColor = function(baseColor){ var colorLiStr = ‘’; for(var j=0 ; j<6 ; j++){ for(var k=0 ; k<6 ; k++){ var tempColor = baseColor + t.colorBaseArr[k] + t.colorBaseArr[j] ; colorLiStr += "<li data-bg='"+tempColor+"' style='background:#" + tempColor + ";'></li>"; } } t.htmlStr +="<ul data-base='"+baseColor+"'>" + colorLiStr + "</ul>"; } for(var i=0 , len=t.colorBaseArr.length; i<len ; i++){ createColor(t.colorBaseArr[i]); }
|
这样,调色板就生成完成。
读取调色板
上文的内容描述了调色板的生成,接下来我们需要预览颜色,当点击其中一种颜色时,还应该获取选中的颜色值,对生成的颜色列表加入交互事件,由于列表数量较多,此处我们采用事件代理:
var colorPanle = ele.byClass(".color-panle",colorPanle)[0], colorList = ele.byClass(".color-list",colorPanle)[0], colorVal = ele.byClass(".color-val",colorPanle)[0], colorShow = ele.byClass(".color-show",colorPanle)[0]; var colorRead = function(eventType,e){ return function (e){ var e=window.event || e, target= e.target || e.srcElement; if(target.nodeName.toLowerCase()==="li"){ switch (eventType){ case "mouseover" : colorShow.style.background = colorVal.innerHTML = "#" + target.getAttribute("data-bg"); break; case "click" : showColorPanleEle.value = "#" + target.getAttribute("data-bg"); colorPanle.style.display = "none"; break; default: return; } } } } eventUnit.addEvent(colorList,"mouseover",colorRead("mouseover")); eventUnit.addEvent(colorList,"click",colorRead("click"));
|
应用调色板
如你所知,在页面载入后,调色板是默认不可见的。就像编辑器里一样,在需要选取颜色的时候调色板才插入到页面或者显示出来,因此,我们需要把它改为用户手动触发,封装以上代码,最后您可通过以下描述使用调色板:
1.引入colorTake.js文件
2.页面加入触发的html,并实例化colorTake
<input type="text" value="" id="color-get" /> var colorGet = document.getElementById("color-get"); new colorTake(colorGet );
|
点击预览 调色板demo 。