liudaoru 发表于 2013-2-7 09:11:40

web颜色拾取器[z]

学习。。。。。。。
-----------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>Color</title><style type="text/css">#Color {    width:282px;    height:156px;    padding:10px;    background-color:#F4F4F4;    border:#CCCCCC 1px solid;    position:absolute;    display:none;}#Color .Color_left {    float:left;    clear:left;}#Color .Color_right {    float:right;    clear:right;    width:32px;    text-align:center;}#Color .Color_tr {    clear:both;}#Color .Color_td_L, #Color .Color_td_R {    cursor:pointer;}#Color .Color_td_L {    float:left;    width:8px;    height:8px;    overflow:hidden;}#Color .Color_td_R {    width:25px;    height:4px;    overflow:hidden;    margin:auto;}#Color .Color_back, #Color .Color_text {    margin-top:8px;}#Color .Color_back {    float:left;    width:60px;    height:18px;    overflow:hidden;    border:#000000 1px solid;    cursor:pointer;}#Color .Color_text {    float:right;    line-height:18px;    overflow:hidden;    font-size:14px;}</style><script type="text/javascript">(function (bool) {//兼容FF一些方法    var html;      window.IE = /MSIE/.test(window.navigator.userAgent);    window.FF = bool;      if (bool) {            html = window.HTMLElement.prototype;                window.__defineGetter__("event", function () {      //兼容Event对象            var o = arguments.callee;                            do {                if (o.arguments instanceof Event) return o.arguments;                        } while (o = o.caller);                        return null;      });                Event.prototype.__defineGetter__("srcElement", function () {      //兼容Event.srcElement对象            var n = this.target;            while (n.nodeType != 1) n = n.parentNode;            return n;      });                MouseEvent.prototype.__defineGetter__("wheelDelta", function () {      //返回鼠标滚轮状态            return this.detail * -1;      });                html.__defineSetter__("className", function (t_v) {            this.setAttribute("class", t_v);      });                html.__defineGetter__("className", function () {            return this.getAttribute("class");      });            }    })(/Firefox/.test(window.navigator.userAgent));var Class = {//创建类    create : function () {      return function () {            this.initialize.apply(this, arguments);      };    }};var $ = function (id) {    return "string" == typeof id ? document.getElementById(id) : id;};var $A = function (a) {//转换数组    return a ? Array.apply(null, a) : new Array;};Function.prototype.bind = function () {//绑定事件    var wc = this, a = $A(arguments), o = a.shift();    return function () {      wc.apply(o, a.concat($A(arguments)));    };};Object.extend = function (a, b) {//追加方法    for (var i in b) a = b;    return a;};Object.extend(Object, {    addEvent : function (a, b, c, d) {    //添加函数      var $ni, $nf;      if (b.constructor != Array) { $ni = $nf = b; }      else { $ni = b, $nf = b; }                if (a.attachEvent) a.attachEvent($ni, c);      else a.addEventListener($nf.replace(/^on/, ""), c, d || false);      return c;    },      delEvent : function (a, b, c, d) {    //删除函数      var $ni, $nf;      if (b.constructor != Array) { $ni = $nf = b; }      else { $ni = b, $nf = b; }                if (a.detachEvent) a.detachEvent($ni, c);      else a.removeEventListener($nf.replace(/^on/, ""), c, d || false);      return c;    }    });var Color = Class.create();Color.prototype = {//颜色摄取类,颜色算法偷滴说。。。:D    hexch : ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'],      cnum : ,    initialize : function (color) {    //初始化参数      var wc = this;      wc.color = color;      wc.rgb = "";      wc.event = { keydown : null };      wc.nonce = { obj : null, pro : null };      wc.body = { left : null, right : null, text : null, back : null };      wc.moveobj = { left : null, right : null, nonce : null };    },      load : function () {    //加载构造      var wc = this, os = wc.color.getElementsByTagName("div"), i = 0;      for (; i < os.length ; i ++)            if (os.nodeType != 3) {                if (os.className == "Color_left") wc.body.left = os;                else if (os.className == "Color_right") wc.body.right = os;                else if (os.className == "Color_text") wc.body.text = os;                else if (os.className == "Color_back") wc.body.back = os;            }    },      toHex : function (n) {    //转换成16进制      var wc = this, h, l;      n = Math.round(n), l = n % 16, h = Math.floor((n / 16)) % 16;      return (wc.hexch + wc.hexch);    },      toColor : function (r, g, b, n) {    //不知      var wc = this            , r = ((r * 16 + r) * 3 * (15 - n) + 128 * n) / 15            , g = ((g * 16 + g) * 3 * (15 - n) + 128 * n) / 15            , b = ((b * 16 + b) * 3 * (15 - n) + 128 * n) / 15;      return wc.toHex(r) + wc.toHex(g) + wc.toHex(b);    },      doColor : function (l) {    //不知      var wc = this, c = wc.rgb, r = '0x' + c.substring(1, 3), g = '0x' + c.substring(3, 5), b = '0x' + c.substring(5, 7);      if (l > 120) {            l = l - 120            , r = (r * (120 - l) + 255 * l) / 120            , g = (g * (120 - l) + 255 * l) / 120            , b = (b * (120 - l) + 255 * l) / 120;      } else {            r = (r * l) / 120, g = (g * l) / 120, b = (b * l) / 120;      }      return wc.toHex(r) + wc.toHex(g) + wc.toHex(b);    },      foColor : function (c) {    //把ff的背景转换掉      var wc = this, a;      if (c.indexOf("#") > -1) return c;      else {            a = c.match(/\d+/g);            return "#" + wc.toT16(a) + wc.toT16(a) + wc.toT16(a);      }    },      toT16 : function (i) {    //补充十位      var s = parseInt(i).toString(16);      return ("0" + s).substr(s.length - 1);    },      offset : function (o) {    //设置定位      var $x = $y = 0;      do { $x += o.offsetLeft, $y += o.offsetTop; }      while (o = o.offsetParent);      return { x : $x, y : $y };    },      setMoveobj : function (pro, obj) {    //设置当前选中对象的样式      var wc = this, att;                if (wc.moveobj == obj) return;      else {            att = { pre : [], nex : [] };                        if (pro == "right") { att.pre = ["4px", "25px", "none"], att.nex = ["6px", "30px", "#000000 1px solid"]; }            else { att.pre = ["8px", "8px", "none"], att.nex = ["6px", "6px", "#000000 1px solid"]; }                if (wc.moveobj) with (wc.moveobj.style) { height = att.pre, width = att.pre, border = att.pre; }            wc.moveobj = obj;            if (wc.moveobj) with (wc.moveobj.style) { height = att.nex, width = att.nex, border = att.nex; }      }    },      nextSibling : function (obj) {    //获取下一个对象      do {            obj = obj.nextSibling;      } while (obj && obj.nodeType == 3);      return obj;    },      previousSibling : function (obj) {    //获取前一个对象      do {            obj = obj.previousSibling;      } while (obj && obj.nodeType == 3);      return obj;    },      parse : function (obj) {    //生成右边的颜色值      var wc = this, color = wc.foColor(obj.style.backgroundColor), a, i;      if (wc.rgb == color) return;      else {            a = [], wc.rgb = color;            for (i = 0 ; i <= 30 ; i ++) a = wc.doColor(240 - i * 8);            wc.body.right.innerHTML = '<div class="Color_tr"><div class="Color_td_R" style="background-color:#'                + a.join(';"><\/div><\/div><div class="Color_tr"><div class="Color_td_R" style="background-color:#')                + ';"><\/div><\/div>';            wc.setMoveobj("left", obj);            wc.setMoveobj("right", wc.body.right.childNodes.childNodes);      }    },      move : function () {    //鼠标移动的时候      var wc = this, e = window.event, td = wc.moveobj.nonce = e.srcElement;      if (/^(?!Color_td)/.test(td.className)) return;      else {            if (arguments) wc.parse(td);            if (td.className == "Color_td_R") wc.setMoveobj("right", td);            wc.setInfo();      }      if (e.stopPropagation) e.stopPropagation();      else e.cancelBubble = true;    },      wheel : function () {    //鼠标滚轮滚动的时候      var wc = this, e = window.event, moveobj = wc.moveobj, f = (e.wheelDelta > 0 ? "previous" : "next"),            x = wc(moveobj.right.parentNode);      if (x) wc.setMoveobj("right", wc.moveobj.nonce = x.childNodes);      wc.setInfo();    },      enter : function (bool) {    //确认的时候      var wc = this, e = window.event;      if ((e.type != "keydown" && /^(?!Color_td)/.test(e.srcElement.className))            || (e.type == "keydown" && (e.which || e.keyCode) != 13)) return;                wc.nonce.obj = wc.foColor(wc.moveobj.nonce.style.backgroundColor);                wc.color.style.display = "none";      wc.parse(wc.moveobj.nonce = wc.body.left.childNodes.childNodes);                wc.setMoveobj("left", wc.moveobj.nonce);      wc.setMoveobj("right", right = wc.body.right.childNodes.childNodes);      wc.setInfo();      Object.delEvent(document, "onkeydown", wc.event.keydown);      wc.event.keydown = null;    },      setInfo : function (obj) {    //设置路过的颜色信息      var wc = this, color = wc.foColor(wc.moveobj.nonce.style.backgroundColor);      wc.body.text.innerHTML = color, wc.body.back.style.backgroundColor = color;    },      show : function (obj, pro) {    //显示菜单      var wc = this, pos = wc.offset(obj);                if (!wc.moveobj.nonce) wc.init();      wc.nonce.obj = obj, wc.nonce.pro = pro;      with (wc.color.style) { left = pos.x + "px", top = obj.offsetHeight + pos.y + "px", display = "block"; }      if (!wc.event.keydown) wc.event.keydown = Object.addEvent(document, "onkeydown", wc.enter.bind(wc));    },    init : function () {    //生成颜色表,并且添加方法      var wc = this, i = j = n1 = n2 = n3 = 0, tr = [], td = [];                wc.color = document.getElementById(wc.color);      wc.load();                for (; i < 16 ; i ++) {            for (b = [], j = 0 ; j < 30 ; j ++) {                n1 = j % 5, n2 = Math.floor(j / 5) * 3, n3 = n2 + 3;                              td = wc.toColor(                  wc.cnum * n1 + wc.cnum * (5 - n1)                  , wc.cnum * n1 + wc.cnum * (5 - n1)                  , wc.cnum * n1 + wc.cnum * (5 - n1)                  , i                );            }                        tr = '<div class="Color_td_L" style="background-color:#'                + td.join(';"><\/div><div class="Color_td_L" style="background-color:#')                + ';"><\/div>';      }      wc.body.left.innerHTML = '<div class="Color_tr">' + tr.join('<\/div><div class="Color_tr">') + '<\/div>';      wc.parse(wc.moveobj.nonce = wc.body.left.childNodes.childNodes);      wc.setInfo();                Object.addEvent(wc.body.left, "onmousemove", wc.move.bind(wc, false));      Object.addEvent(wc.body.left, "onmousedown", wc.move.bind(wc, true));      Object.addEvent(wc.body.right, "onmousedown", wc.move.bind(wc, false));      Object.addEvent(wc.body.right, ["onmousewheel", "DOMMouseScroll"], wc.wheel.bind(wc));      Object.addEvent(wc.body.left, "ondblclick", wc.enter.bind(wc));      Object.addEvent(wc.body.right, "ondblclick", wc.enter.bind(wc));    }    };var wc = new Color("Color");</script></head><body><!--取色器 开始--><div id="Color">    <div class="Color_left"></div>    <div class="Color_right"></div>    <div>      <div class="Color_back"></div>      <div class="Color_text"></div>    </div></div><!--取色器 结束--><inputreadonly="readonly" /><divstyle="width:100px; height:20px;text-align:center; border:#000000 1px solid;"></div></body></html>
页: [1]
查看完整版本: web颜色拾取器[z]