CSS样式设计工具,兼容性很强的颜色控件

http://jmams.github.io/test/201501/test.html

//author zhoubo49@gmail.com
// css生成插件
var JcssPicker = window.JcssPicker || {};

//=========================================
JcssPicker.ui = {	
	//设置位置
	setPoint: function(_x, _y) {
		this.x = _x;
		this.y = _y;
	},
	//设置尺寸	
	setDimension: function(_width, _height) {
		this.width = _width;
		this.height = _height;
	},
    //判断是否IE
	isIE: function() { return window.ActiveXObject; },	
	//获取事件
	getEvent: function () {
	    if (this.isIE()) {
	        return window.event;
	    }
	    var func = this.getEvent.caller;
	    var count = 0;
	    while (func != null) {
	        var arg0 = func.arguments[func.arguments.length - 1];
	        if (arg0) {
	            if ((arg0.constructor == Event || arg0.constructor == MouseEvent)
	|| (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {
	                return arg0;
	            }
	        }
	        func = func.caller;
	        count++;
	        if (count > 50) {
	            break;
	        }
	    }
	    return null;
	},
	//取消默认事件
	cancelEvent: function (returnValue) {
	    var ev = this.getEvent();
	    if (ev != null) {
	        ev.cancelBubble = true;
	        if (ev.originalEvent) {
	            ev.stopPropagation();
	        }
	        if (!returnValue) {
	            ev.returnValue = false;
	            if (ev.originalEvent) {
	                ev.preventDefault();
	            }
	        }
	    }
	},
	
	getMousePoint: function(div){
		 var ev = this.getEvent();
		if(div){
			var da = this.getMousePoint();
			var db = this.getDivPoint(div);
			return new this.setPoint(da.x-db.x,da.y-db.y);
		}
		if(this.isIE()){
			var p = this.getDivPoint(ev.srcElement);
			return new this.setPoint(p.x+ ev.offsetX,p.y + ev.offsetY);
		}else{
			return new this.setPoint(ev.clientX + document.body.scrollLeft,ev.clientY + document.body.scrollTop);
		}
	},
	
    //设置div坐标
	setDivPoint: function(div, x, y) {
		div.style.top = y + "px";
		div.style.left = x + "px";
	},
    //获得div坐标
	getDivPoint: function(div) {
		if (div.style
				&& (div.style.position == "absolute" || div.style.position == "relative")) {
			return new setPoint(div.offsetLeft + 1, div.offsetTop + 1);
		} else if (div.offsetParent) {
			var d = this.getDivPoint(div.offsetParent);
			return new this.setPoint(d.x + div.offsetLeft-div.scrollLeft, d.y + div.offsetTop-div.scrollTop);
		} else {
			return new this.setPoint(0, 0);
		}
	}
};

var el = JcssPicker.el = function (element) {
    if (typeof element == 'string') {
        return document.getElementById(element);
    }else { return element; }
};

//===============颜色插件=======================================================================================================
/*用法: JcssPicker.pickColor(control, function(colorVal){...});
 */
JcssPicker.ColorPicker = function (container, currentHEX) {
  this.__typeName = "JcssPicker.ColorPicker";
  this.container = container == null ? document.body : container;
  this.onchange = function () { };
  this.colorSelected = null;
  this.currentHEX = currentHEX == null ? '#000000' : (currentHEX.match(/^#([0-9a-fA-F]{6}|[0-9a-fA-f]{3})$/) == null ? '#000000': currentHEX.toUpperCase());
  this.currentGRAY = '120';
  this.lastHEX = '';
  this.hexch = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
};
JcssPicker.ColorPicker.prototype.create = function (doc) {
  doc = doc == null ? document : doc;

  var control = doc.getElementById('jcss-control-colorpicker');
  if (control != null)
      return control;

  var cnum = new Array(1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0);
  var owner = this;

  control = doc.createElement("div");
  control.id = 'jcss-control-colorpicker';
  control.style.width = "250px";
  control.style.backgroundColor = "#eee";
  control.style.display = "block";
  control.style.position = "absolute";
  control.style.zIndex = 60000;  
  control.className = "title";

  var containertable = doc.createElement("table");
  containertable.cellSpacing = 5;
  var containerbody = doc.createElement("tbody");
  containertable.appendChild(containerbody);
  var containertr = doc.createElement("tr");
  containertr.style.height = "auto";
  containerbody.appendChild(containertr);

  var colortd = doc.createElement("td");
  var graytd = doc.createElement("td");
  containertr.appendChild(colortd);
  containertr.appendChild(graytd);

  var colortable = doc.createElement("table");
  colortable.id = "colorpicker-colortable";
  colortable.cellSpacing = 0;
  colortable.cellPadding = 0;
  colortable.style.cursor = "pointer";
  colortd.appendChild(colortable);

  colortable.onclick = function () {
      owner.currentHEX = JcssPicker.ui.getEvent().srcElement.bgColor;
      owner.endColor();
      JcssPicker.ui.cancelEvent();
  };
  colortable.onmouseover = function () {
      el('colorpicker-hex').innerText = JcssPicker.ui.getEvent().srcElement.bgColor.toUpperCase();
      owner.endColor();
      JcssPicker.ui.cancelEvent();
  };
  colortable.onmouseout = function () {
      el('colorpicker-hex').innerText = owner.currentHEX;
      owner.endColor();
      JcssPicker.ui.cancelEvent();
  };

  var colortablebody = doc.createElement("tbody");
  colortable.appendChild(colortablebody);

  for (var i = 0; i < 16; i++) {
      var tr = doc.createElement("tr");
      tr.style.height = "auto";
      colortablebody.appendChild(tr);

      for (var j = 0; j < 30; j++) {
          n1 = j % 5;
          n2 = Math.floor(j / 5) * 3;
          n3 = n2 + 3;

          var td = doc.createElement("td");
          td.style.width = "8px";
          td.style.height = "8px";
          td.bgColor = this.toColor((cnum[n3] * n1 + cnum[n2] * (5 - n1)),
              (cnum[n3 + 1] * n1 + cnum[n2 + 1] * (5 - n1)),
              (cnum[n3 + 2] * n1 + cnum[n2 + 2] * (5 - n1)), i);

          tr.appendChild(td);
      }

  }

  var graytable = doc.createElement("table");
  graytable.cellSpacing = 0;
  graytable.cellPadding = 0;
  graytable.id = "colorpicker-graytable";
  graytable.style.cursor = "pointer";
  graytd.appendChild(graytable);

  var graytablebody = doc.createElement("tbody");
  graytable.appendChild(graytablebody);

  for (i = 255; i >= 0; i -= 8.5) {
      var tr = doc.createElement("tr");
      tr.style.height = "auto";
      graytablebody.appendChild(tr);
      var td = doc.createElement("td");
      td.style.width = "20px";
      td.style.height = "4px";
      td.title = Math.floor(i * 16 / 17);
      tr.bgColor = '#' + this.toHex(i) + this.toHex(i) + this.toHex(i);
      tr.appendChild(td);
  }
  graytable.onclick = function () {
      owner.currentGRAY = JcssPicker.ui.getEvent().srcElement.title;
      owner.endColor();
      JcssPicker.ui.cancelEvent();
      return false;
  };
  graytable.onmouseover = function () {
      el('colorpicker-gray').innerText = JcssPicker.ui.getEvent().srcElement.title;
      owner.endColor();
      JcssPicker.ui.cancelEvent();
      return false;
  };
  graytable.onmouseout = function () {
      el('colorpicker-gray').innerText = owner.currentGRAY;
      owner.endColor();
      JcssPicker.ui.cancelEvent();
      return false;
  };

  control.appendChild(containertable);

  var notecontrol = doc.createElement("div");
  var notetable = doc.createElement("table");
  notetable.cellSpacing = 0;
  notetable.cellPadding = 0;
  notetable.style.width = "100%";
  notecontrol.appendChild(notetable);

  var notetablebody = doc.createElement("tbody");
  notetable.appendChild(notetablebody);

  var notetr = doc.createElement("tr");
  notetablebody.appendChild(notetr);
  var td = doc.createElement("td");
  td.innerHTML = "<table ID="colorpicker-showcolor" style="background-color: "+this.currentHEX+";" bgcolor=""+this.currentHEX+"" border="1" width="25" height="25" cellspacing="0" cellpadding="0"><tr><td></td></tr></table><br/><span id="colorpicker-selcolor">"+this.currentHEX+"</span>";
  td.align = "center";
  td.style.width = "80px";
  notetr.appendChild(td);

  td = doc.createElement("td");
  td.innerHTML = "基色 :<span id="colorpicker-hex">"+this.currentHEX+"</SPAN><BR>亮度 :<span id="colorpicker-gray">120</span>";
  notetr.appendChild(td);

  td = doc.createElement("td");
  td.align = "center";
  td.style.width = "60px";
  var okbutton = doc.createElement("input");
  okbutton.type = "button";
  okbutton.className = "button";
  okbutton.value = "确定";
  okbutton.onclick = function () {
      if (owner.colorSelected)
          owner.colorSelected(el('colorpicker-selcolor').innerHTML);
  };
  td.appendChild(okbutton);
  notetr.appendChild(td);

  notecontrol.onclick = function () { JcssPicker.ui.cancelEvent(); };

  control.appendChild(notecontrol);

  return control;
};
JcssPicker.ColorPicker.prototype.toColor = function (r, g, b, n) {
  r = ((r * 16 + r) * 3 * (15 - n) + 0x80 * n) / 15;
  g = ((g * 16 + g) * 3 * (15 - n) + 0x80 * n) / 15;
  b = ((b * 16 + b) * 3 * (15 - n) + 0x80 * n) / 15;

  return '#' + this.toHex(r) + this.toHex(g) + this.toHex(b);
};
JcssPicker.ColorPicker.prototype.toHex = function (n) {
  var h, l;
  n = Math.round(n);
  l = n % 16;
  h = Math.floor((n / 16)) % 16;
  return (this.hexch[h] + this.hexch[l]);
};

JcssPicker.ColorPicker.prototype.doColor = function (c, l) {
  var r, g, b;

  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 '#' + this.toHex(r) + this.toHex(g) + this.toHex(b);
};

//
JcssPicker.ColorPicker.prototype.endColor = function () {
  if (this.lastHEX != this.currentHEX) {
      var i;
      this.lastHEX = this.currentHEX;
      for (i = 0; i <= 30; i++) {
          el('colorpicker-graytable').rows[i].bgColor = this.doColor(this.currentHEX, 240 - i * 8);
      }
  }

  el('colorpicker-selcolor').innerHTML = this.doColor(el('colorpicker-hex').innerText, el('colorpicker-gray').innerText);
  el('colorpicker-showcolor').bgColor = el('colorpicker-selcolor').innerHTML;
  el('colorpicker-showcolor').style.backgroundColor = el('colorpicker-selcolor').innerHTML;
};
//渲染颜色
JcssPicker.ColorPicker.prototype.renderByColor = function (defaultHEX) {	 
	  this.currentHEX = defaultHEX == null ? '#000000' : (defaultHEX.match(/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/) == null ? '#000000': defaultHEX.toUpperCase());
	  this.currentHEX = this.currentHEX.substring(1);
	  if(this.currentHEX.length === 3){ this.currentHEX += this.currentHEX; }  
	  this.currentHEX = "#"+this.currentHEX;
	  el('colorpicker-hex').innerText = this.currentHEX;
	  this.endColor();	
};
	
JcssPicker.pickColor = function (control, callBack, defaultHEX) {
  JcssPicker.ui.cancelEvent();
  var controlColorPicker = document.getElementById('jcss-control-colorpicker');  
  if (controlColorPicker == null) {	 
      var cp = new JcssPicker.ColorPicker();
      controlColorPicker = cp.create();      
      document.body.appendChild(controlColorPicker);
      controlColorPicker.colorPicker = cp;
      controlColorPicker.style.display = "none";      
      document.body.onclick = function(event) {    	  
    	  if(controlColorPicker.style.display == "")
    	  controlColorPicker.style.display = "none";
	  };
  }
  if(defaultHEX != null) { controlColorPicker.colorPicker.renderByColor(defaultHEX);}   
  var p = JcssPicker.ui.getDivPoint(control);
  JcssPicker.ui.setDivPoint(controlColorPicker, p.x, p.y+20);
  controlColorPicker.style.display = "";
  controlColorPicker.colorPicker.colorSelected = function (val) {
      if (val != null) {
          if (callBack != null) {
              callBack(val);
          }
          else {
              if (control != null) {
                  control.value = val;                  
              }
          }
      }      
      controlColorPicker.style.display = "none";
      $(control).trigger("change");
  };
  return false;
};


//收录了140多个具有英文颜色名的的16进制和RGB的颜色对照表
//[颜色中文名, 16进制颜色, RGB整数颜色, RGB百分比颜色]
JcssPicker.ColorRefTable = [
['aliceblue','#f0f8ff','rgb(240,248,255)','rgb(94.1%,96.9%,100%)'],
['antiquewhite','#faebd7','rgb(250,235,215)','rgb(98%,92.2%,84.3%)'],
['aqua','#00ffff','rgb(0,255,255)','rgb(0%,100%,100%)'],
['aquamarine','#7fffd4','rgb(127,255,212)','rgb(49.8%,100%,83.1%)'],
['azure','#f0ffff','rgb(240,255,255)','rgb(94.1%,100%,100%)'],
['beige','#f5f5dc','rgb(245,245,220)','rgb(96.1%,96.1%,86.3%)'],
['bisque','#ffe4c4','rgb(255,228,196)','rgb(100%,89.4%,76.9%)'],
['black','#000000','rgb(0,0,0)','rgb(0%,0%,0%)'],
['blanchedalmond','#ffebcd','rgb(255,235,205)','rgb(100%,92.2%,80.4%)'],
['blue','#0000ff','rgb(0,0,255)','rgb(0%,0%,100%)'],
['blueviolet','#8a2be2','rgb(138,43,226)','rgb(54.1%,16.9%,88.6%)'],
['brown','#a52a2a','rgb(165,42,42)','rgb(64.7%,16.5%,16.5%)'],
['burlywood','#deb887','rgb(222,184,135)','rgb(87.1%,72.2%,52.9%)'],
['cadetblue','#5f9ea0','rgb(95,158,160)','rgb(37.3%,62%,62.7%)'],
['chartreuse','#7fff00','rgb(127,255,0)','rgb(49.8%,100%,0%)'],
['chocolate','#d2691e','rgb(210,105,30)','rgb(82.4%,41.1%,11.8%)'],
['coral','#ff7f50','rgb(255,127,80)','rgb(100%,49.8%,31.4%)'],
['cornflowerblue','#6495ed','rgb(100,149,237)','rgb(39.2%,58.4%,92.9%)'],
['cornsilk','#fff8dc','rgb(255,248,220)','rgb(100%,97.3%,86.3%)'],
['crimson','#dc143c','rgb(220,20,60)','rgb(86.3%,7.8%,23.5%)'],
['cyan','#00ffff','rgb(0,255,255)','rgb(0%,100%,100%)'],
['darkblue','#00008b','rgb(0,0,139)','rgb(0%,0%,54.5%)'],
['darkcyan','#008b8b','rgb(0,139,139)','rgb(0%,54.5%,54.5%)'],
['darkgoldenrod','#b8860b','rgb(184,134,11)','rgb(72.2%,52.5%,4.3%)'],
['darkgray','#a9a9a9','rgb(169,169,169)','rgb(66.3%,66.3%,66.3%)'],
['darkgreen','#006400','rgb(0,100,0)','rgb(0%,39.2%,0%)'],
['darkgrey','#a9a9a9','rgb(169,169,169)','rgb(66.3%,66.3%,66.3%)'],
['darkkhaki','#bdb76b','rgb(189,183,107)','rgb(74.1%,71.8%,42%)'],
['darkmagenta','#8b008b','rgb(139,0,139)','rgb(54.5%,0%,54.5%)'],
['darkolivegreen','#556b2f','rgb(85,107,47)','rgb(33.3%,42%,18.4%)'],
['darkorange','#ff8c00','rgb(255,140,0)','rgb(100%,54.9%,0%)'],
['darkorchid','#9932cc','rgb(153,50,204)','rgb(60%,19.6%,80%)'],
['darkred','#8b0000','rgb(139,0,0)','rgb(54.5%,0%,0%)'],
['darksalmon','#e9967a','rgb(233,150,122)','rgb(91.4%,58.8%,47.8%)'],
['darkseagreen','#8fbc8f','rgb(143,188,143)','rgb(56.1%,73.7%,56.1%)'],
['darkslateblue','#483d8b','rgb(72,61,139)','rgb(28.2%,23.9%,54.5%)'],
['darkslategray','#2f4f4f','rgb(47,79,79)','rgb(18.4%,31%,31%)'],
['darkslategrey','#2f4f4f','rgb(47,79,79)','rgb(18.4%,31%,31%)'],
['darkturquoise','#00ced1','rgb(0,206,209)','rgb(0%,80.8%,82%)'],
['darkviolet','#9400d3','rgb(148,0,211)','rgb(58%,0%,82.7%)'],
['deeppink','#ff1493','rgb(255,20,147)','rgb(100%,7.8%,57.6%)'],
['deepskyblue','#00bfff','rgb(0,191,255)','rgb(0%,74.9%,100%)'],
['dimgray','#696969','rgb(105,105,105)','rgb(41.1%,41.1%,41.1%)'],
['dimgrey','#696969','rgb(105,105,105)','rgb(41.1%,41.1%,41.1%)'],
['dodgerblue','#1e90ff','rgb(30,144,255)','rgb(11.8%,56.5%,100%)'],
['firebrick','#b22222','rgb(178,34,34)','rgb(69.8%,13.3%,13.3%)'],
['floralwhite','#fffaf0','rgb(255,250,240)','rgb(100%,98%,94.1%)'],
['forestgreen','#228b22','rgb(34,139,34)','rgb(13.3%,54.5%,13.3%)'],
['fuchsia','#ff00ff','rgb(255,0,255)','rgb(100%,0%,100%)'],
['gainsboro','#dcdcdc','rgb(220,220,220)','rgb(86.3%,86.3%,86.3%)'],
['ghostwhite','#f8f8ff','rgb(248,248,255)','rgb(97.3%,97.3%,100%)'],
['gold','#ffd700','rgb(255,215,0)','rgb(100%,84.3%,0%)'],
['goldenrod','#daa520','rgb(218,165,32)','rgb(85.5%,64.7%,12.5%)'],
['gray','#808080','rgb(128,128,128)','rgb(50.2%,50.2%,50.2%)'],
['green','#008000','rgb(0,128,0)','rgb(0%,50.2%,0%)'],
['greenyellow','#adff2f','rgb(173,255,47)','rgb(67.8%,100%,18.4%)'],
['grey','#808080','rgb(128,128,128)','rgb(50.2%,50.2%,50.2%)'],
['honeydew','#f0fff0','rgb(240,255,240)','rgb(94.1%,100%,94.1%)'],
['hotpink','#ff69b4','rgb(255,105,180)','rgb(100%,41.1%,70.6%)'],
['indianred','#cd5c5c','rgb(205,92,92)','rgb(80.4%,36%,36%)'],
['indigo','#4b0082','rgb(75,0,130)','rgb(29.4%,0%,51%)'],
['ivory','#fffff0','rgb(255,255,240)','rgb(100%,100%,94.1%)'],
['khaki','#f0e68c','rgb(240,230,140)','rgb(94.1%,90.2%,54.9%)'],
['lavender','#e6e6fa','rgb(230,230,250)','rgb(90.2%,90.2%,98%)'],
['lavenderblush','#fff0f5','rgb(255,240,245)','rgb(100%,94.1%,96.1%)'],
['lawngreen','#7cfc00','rgb(124,252,0)','rgb(48.6%,98.8%,0%)'],
['lemonchiffon','#fffacd','rgb(255,250,205)','rgb(100%,98%,80.4%)'],
['lightblue','#add8e6','rgb(173,216,230)','rgb(67.8%,84.7%,90.2%)'],
['lightcoral','#f08080','rgb(240,128,128)','rgb(94.1%,50.2%,50.2%)'],
['lightcyan','#e0ffff','rgb(224,255,255)','rgb(87.8%,100%,100%)'],
['lightgoldenrodyellow','#fafad2','rgb(250,250,210)','rgb(98%,98%,82.4%)'],
['lightgray','#d3d3d3','rgb(211,211,211)','rgb(82.7%,82.7%,82.7%)'],
['lightgreen','#90ee90','rgb(144,238,144)','rgb(56.5%,93.3%,56.5%)'],
['lightgrey','#d3d3d3','rgb(211,211,211)','rgb(82.7%,82.7%,82.7%)'],
['lightpink','#ffb6c1','rgb(255,182,193)','rgb(100%,71.4%,75.7%)'],
['lightsalmon','#ffa07a','rgb(255,160,122)','rgb(100%,62.7%,47.8%)'],
['lightseagreen','#20b2aa','rgb(32,178,170)','rgb(12.5%,69.8%,66.7%)'],
['lightskyblue','#87cefa','rgb(135,206,250)','rgb(52.9%,80.8%,98%)'],
['lightslategray','#778899','rgb(119,136,153)','rgb(46.7%,53.3%,60%)'],
['lightslategrey','#778899','rgb(119,136,153)','rgb(46.7%,53.3%,60%)'],
['lightsteelblue','#b0c4de','rgb(176,196,222)','rgb(69%,76.9%,87.1%)'],
['lightyellow','#ffffe0','rgb(255,255,224)','rgb(100%,100%,87.8%)'],
['lime','#00ff00','rgb(0,255,0)','rgb(0%,100%,0%)'],
['limegreen','#32cd32','rgb(50,205,50)','rgb(19.6%,80.4%,19.6%)'],
['linen','#faf0e6','rgb(250,240,230)','rgb(98%,94.1%,90.2%)'],
['magenta','#ff00ff','rgb(255,0,255)','rgb(100%,0%,100%)'],
['maroon','#800000','rgb(128,0,0)','rgb(50.2%,0%,0%)'],
['mediumaquamarine','#66cdaa','rgb(102,205,170)','rgb(40%,80.4%,66.7%)'],
['mediumblue','#0000cd','rgb(0,0,205)','rgb(0%,0%,80.4%)'],
['mediumorchid','#ba55d3','rgb(186,85,211)','rgb(72.9%,33.3%,82.7%)'],
['mediumpurple','#9370db','rgb(147,112,219)','rgb(57.6%,43.9%,85.9%)'],
['mediumseagreen','#3cb371','rgb(60,179,113)','rgb(23.5%,70.2%,44.3%)'],
['mediumslateblue','#7b68ee','rgb(123,104,238)','rgb(48.2%,40.8%,93.3%)'],
['mediumspringgreen','#00fa9a','rgb(0,250,154)','rgb(0%,98%,60.4%)'],
['mediumturquoise','#48d1cc','rgb(72,209,204)','rgb(28.2%,82%,80%)'],
['mediumvioletred','#c71585','rgb(199,21,133)','rgb(78%,8.2%,52.2%)'],
['midnightblue','#191970','rgb(25,25,112)','rgb(9.8%,9.8%,43.9%)'],
['mintcream','#f5fffa','rgb(245,255,250)','rgb(96.1%,100%,98%)'],
['mistyrose','#ffe4e1','rgb(255,228,225)','rgb(100%,89.4%,88.2%)'],
['moccasin','#ffe4b5','rgb(255,228,181)','rgb(100%,89.4%,71%)'],
['navajowhite','#ffdead','rgb(255,222,173)','rgb(100%,87.1%,67.8%)'],
['navy','#000080','rgb(0,0,128)','rgb(0%,0%,50.2%)'],
['oldlace','#fdf5e6','rgb(253,245,230)','rgb(99.2%,96.1%,90.2%)'],
['olive','#808000','rgb(128,128,0)','rgb(50.2%,50.2%,0%)'],
['olivedrab','#6b8e23','rgb(107,142,35)','rgb(42%,55.7%,13.7%)'],
['orange','#ffa500','rgb(255,165,0)','rgb(100%,64.7%,0%)'],
['orangered','#ff4500','rgb(255,69,0)','rgb(100%,27.1%,0%)'],
['orchid','#da70d6','rgb(218,112,214)','rgb(85.5%,43.9%,83.9%)'],
['palegoldenrod','#eee8aa','rgb(238,232,170)','rgb(93.3%,91%,66.7%)'],
['palegreen','#98fb98','rgb(152,251,152)','rgb(59.6%,98.4%,59.6%)'],
['paleturquoise','#afeeee','rgb(175,238,238)','rgb(68.6%,93.3%,93.3%)'],
['palevioletred','#db7093','rgb(219,112,147)','rgb(85.9%,43.9%,57.6%)'],
['papayawhip','#ffefd5','rgb(255,239,213)','rgb(100%,93.7%,83.5%)'],
['peachpuff','#ffdab9','rgb(255,218,185)','rgb(100%,85.5%,72.5%)'],
['peru','#cd853f','rgb(205,133,63)','rgb(80.4%,52.2%,24.7%)'],
['pink','#ffc0cb','rgb(255,192,203)','rgb(100%,75.3%,79.6%)'],
['plum','#dda0dd','rgb(221,160,221)','rgb(86.7%,62.7%,86.7%)'],
['powderblue','#b0e0e6','rgb(176,224,230)','rgb(69%,87.8%,90.2%)'],
['purple','#800080','rgb(128,0,128)','rgb(50.2%,0%,50.2%)'],
['red','#ff0000','rgb(255,0,0)','rgb(100%,0%,0%)'],
['rosybrown','#bc8f8f','rgb(188,143,143)','rgb(73.7%,56.1%,56.1%)'],
['royalblue','#4169e1','rgb(65,105,225)','rgb(25.5%,41.1%,100%)'],
['saddlebrown','#8b4513','rgb(139,69,19)','rgb(54.5%,27.1%,7.5%)'],
['salmon','#fa8072','rgb(250,128,114)','rgb(98%,50.2%,44.7%)'],
['sandybrown','#f4a460','rgb(244,164,96)','rgb(95.7%,64.3%,37.6%)'],
['seagreen','#2e8b57','rgb(46,139,87)','rgb(18%,54.5%,34.1%)'],
['seashell','#fff5ee','rgb(255,245,238)','rgb(100%,96.1%,93.3%)'],
['sienna','#a0522d','rgb(160,82,45)','rgb(62.7%,32.2%,17.6%)'],
['silver','#c0c0c0','rgb(192,192,192)','rgb(75.3%,75.3%,75.3%)'],
['skyblue','#87ceeb','rgb(135,206,235)','rgb(52.9%,80.8%,92.2%)'],
['slateblue','#6a5acd','rgb(106,90,205)','rgb(41.6%,35.3%,80.4%)'],
['slategray','#708090','rgb(112,128,144)','rgb(43.9%,50.2%,56.5%)'],
['slategrey','#708090','rgb(112,128,144)','rgb(43.9%,50.2%,56.5%)'],
['snow','#fffafa','rgb(255,250,250)','rgb(100%,98%,98%)'],
['springgreen','#00ff7f','rgb(0,255,127)','rgb(0%,100%,49.8%)'],
['steelblue','#4682b4','rgb(70,130,180)','rgb(27.5%,51%,70.6%)'],
['tan','#d2b48c','rgb(210,180,140)','rgb(82.4%,70.6%,54.9%)'],
['teal','#008080','rgb(0,128,128)','rgb(0%,50.2%,50.2%)'],
['thistle','#d8bfd8','rgb(216,191,216)','rgb(84.7%,74.9%,84.7%)'],
['tomato','#ff6347','rgb(255,99,71)','rgb(100%,38.8%%,27.8%)'],
['turquoise','#40e0d0','rgb(64,224,208)','rgb(25.1%,87.7%,81.6%)'],
['violet','#ee82ee','rgb(238,130,238)','rgb(93.3%,51%,93.3%)'],
['wheat','#f5deb3','rgb(245,222,179)','rgb(96.1%,87.1%,70.2%)'],
['white','#ffffff','rgb(255,255,255)','rgb(100%,100%,100%)'],
['whitesmoke','#f5f5f5','rgb(245,245,245)','rgb(96.1%,96.1%,96.1%)'],
['yellow','#ffff00','rgb(255,255,0)','rgb(100%,100%,0%)'],
['yellowgreen','#9acd32','rgb(154,205,50)','rgb(60.4%,80.4%,19.6%)']
];


//RGB颜色转化为16进制颜色
JcssPicker.rgb2hex = function (rgb) {
	//十进制转化为16进制方法
	function dec2hex(x) { return ("0" + parseInt(x).toString(16)).slice(-2); };
	//RGB颜色转为十六进制颜色
	rgb = rgb.match(/^rgb((d+),s*(d+),s*(d+))$/);
	return "#" + dec2hex(rgb[1]) + dec2hex(rgb[2]) + dec2hex(rgb[3]);
};

//16进制颜色转化为RGB颜色
JcssPicker.hex2rgb = function (hex) {	
	//16进制转化为10进制
	function hex2dec(x) {return parseInt(hex,16).toString(); };
	hex = hex.substring(1);
    if(hex.length === 3){ hex += hex; }  
    return "rgb("+hex2dec(hex.substring(0,2))+","+hex2dec(hex.substring(2,4))+","+hex2dec(hex.substring(4))+")";	
};

//颜色名转化为RGB颜色
JcssPicker.name2rgb = function (name) {
	for(var i=0; i< JcssPicker.ColorRefTable.length; i++)
	{
		if(JcssPicker.ColorRefTable[i][0] == name.toLowerCase()){
			return JcssPicker.ColorRefTable[i][2];
		}
	}
	return null;
};
//颜色名转化为16进制颜色
JcssPicker.name2hex = function (name) {
	for(var i=0; i< JcssPicker.ColorRefTable.length; i++)
	{
		if(JcssPicker.ColorRefTable[i][0] == name.toLowerCase()){
			return JcssPicker.ColorRefTable[i][1];
		}
	}
	return null;
};

//把所以颜色标记统一转为16进制
JcssPicker.color2hex = function (color) {
	color = color.toLowerCase();
	//如果是16进制(3位或6位)转6位; 
	if(/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(color)) { 
		color = color.substring(1);
	    if(color.length === 3){ color += color; }  
		color = "#"+color;
		return color;
	}
	//如果是rgb则转6位16进制; 
	if(/^(rgb)/.test(color)) { 
		color = JcssPicker.rgb2hex(color);
		return color;
	}
	
	if("transparent" == color) { return "#ffffff"; };
	//如果是rgb则转6位16进制;
	if(/^(?!rgb)[a-z]+/.test(color)) {		
		color = JcssPicker.name2hex(color);
		return color;
	}
	return color;
}


//=========================css配置==============================================================
JcssPicker.cssMap = {};
//字体
JcssPicker.cssMap["font"] = {name: "字体", style: "font"};
//字体族
JcssPicker.cssMap["font-family"] = {name: "字体族", style: "fontFamily", opts: [ 
     { name: '宋体', val: '宋体,SimSun'},
     { name: '雅黑', val: '微软雅黑,Microsoft YaHei'},
     { name: '楷体', val: '楷体,楷体_GB2312, SimKai'},
     { name: '黑体', val: '黑体, SimHei'},
     { name: '隶书', val: '隶书, SimLi'},
     { name: 'andaleMono', val: 'andale mono'},
     { name: 'arial', val: 'arial, helvetica,sans-serif'},
     { name: 'arialBlack', val: 'arial black,avant garde'},
     { name: 'comicSansMs', val: 'comic sans ms'},
     { name: 'impact', val: 'impact,chicago'},
     { name: 'timesNewRoman', val: 'times new roman'}]};
//字体大小
JcssPicker.cssMap["font-size"] = {name: "字体大小", style: "fontSize", opts: [ 
     { name: '10px', val: '10px'},
     { name: '11px', val: '11px'},
     { name: '12px', val: '12px'},
     { name: '14px', val: '14px'},
     { name: '16px', val: '16px'},
     { name: '18px', val: '18px'},
     { name: '20px', val: '20px'},
     { name: '24px', val: '24px'},
     { name: '36px', val: '36px'}
     ]};
//字体粗细
JcssPicker.cssMap["font-weight"] = {name: "字体粗细", style: "fontWeight", opts: [ 
     { name: '标准', val: 'normal'},
     { name: '粗体', val: 'bold'}
     ]};
//字体倾斜
JcssPicker.cssMap["font-style"] = {name: "字体倾斜", style: "fontStyle", opts: [ 
     { name: '标准', val: 'normal'},
     { name: '斜体', val: 'italic'}
     ]};
//文字颜色
JcssPicker.cssMap["color"] = {name: "文字颜色", style: "color"};
//文字对齐
JcssPicker.cssMap["text-align"] = {name: "文字对齐", style: "fontStyle", opts: [ 
     { name: '左对齐', val: 'left'},
     { name: '右对齐', val: 'right'},
     { name: '居中', val: 'center'}
     ]};

//文字穿线
JcssPicker.cssMap["text-decoration"] = {name: "文字穿线", style: "textDecoration", opts: [ 
     { name: '上划线', val: 'overline'},
     { name: '下划线', val: 'underline'},
     { name: '删除线', val: 'line-through'}
     ]};
//文字行高
JcssPicker.cssMap["line-height"] = {name: "文字行高", style: "lineHeight"};
//垂直对齐
JcssPicker.cssMap["vertical-align"] = {name: "垂直对齐", style: "verticalAlign", opts: [ 
	  { name: '默认', val: 'baseline'},
	  { name: '顶端对齐', val: 'top'},
	  { name: '中部对齐', val: 'middle'},
	  { name: '底部对齐', val: 'bottom'},
	  { name: '字体顶端对齐', val: 'text-top'},
	  { name: '总统底端对齐', val: 'text-bottom'}
	  ]};
//文字间距
JcssPicker.cssMap["letter-spacing"] = {name: "文字间距", style: "letterSpacing"};

//背景色
JcssPicker.cssMap["background-color"] = {name: "背景色", style: "backgroundColor"};
//宽度
JcssPicker.cssMap["width"] = {name: "宽度", style: "width"};
//高度
JcssPicker.cssMap["height"] = {name: "高度", style: "height"};
//外边距
JcssPicker.cssMap["margin"] = {name: "外边距", style: "margin"};
//内边距
JcssPicker.cssMap["padding"] = {name: "内边距", style: "padding"};


//边框
JcssPicker.cssMap["border"] = {name: "边框", style: "border"};
//边框宽度
JcssPicker.cssMap["border-width"] = {name: "边框宽度", style: "borderWidth"};
//边框风格
JcssPicker.cssMap["border-style"] = {name: "边框风格", style: "borderStyle", opts: [ 
	  { name: '无边框', val: 'none'},
	  { name: '虚线', val: 'solid'},
	  { name: '虚线', val: 'dashed'}
	  ]};
//边框颜色
JcssPicker.cssMap["border-color"] = {name: "边框颜色", style: "borderColor"};



//======================测试示例,可以注释掉==================================================================

$(document).ready(function() {    
	initHtml(el("divCssPicker"));
	$("#divCssPicker").find("[jsstyle]").on("change", function(){		
		$("#divTest").css($(this).attr("cssstyle"), $(this).val());
		document.getElementById('txtTest').value = el("divTest").style.cssText;
	});
	document.getElementById('txtTest').value = el("divTest").style.cssText;
});

function initHtml(elm) {	
	var divList = $(elm).addClass("JcssPicker-list"); 
	divList.empty();
	for(var cssStyle in JcssPicker.cssMap)
	{
		if (JcssPicker.cssMap.hasOwnProperty(cssStyle)) 
		{
			var styleMap = JcssPicker.cssMap[cssStyle];
			var divItem = $("<div>").addClass("JcssPicker-item").appendTo(divList);
			var divDesc = $("<div>").attr("title", cssStyle).addClass("Jcss-desc").appendTo(divItem);
			var divDisp = $("<div>").attr("title", cssStyle).addClass("Jcss-disp").appendTo(divItem);
			divDesc.html(styleMap["name"]+":");
			if( styleMap["opts"] && styleMap["opts"].length > 0) {
				var sel = $("<select>").addClass("Jcss-select").appendTo(divDisp);
				sel.attr("cssstyle",cssStyle);
				sel.attr("jsstyle",styleMap["style"]);
				sel.append("<option>");
				for(var i = 0; i< styleMap["opts"].length; i++) {
					sel.append("<option value='"+styleMap["opts"][i]["val"]+"'>"+styleMap["opts"][i]["name"]+"</option>");
				}
			}
			else {
				var input = $("<input>").addClass("Jcss-input").appendTo(divDisp);
				input.attr("cssstyle",cssStyle);
				input.attr("jsstyle",styleMap["style"]);
			}
		}		
	}
	divList.find("[jsstyle='color'],[jsstyle='borderColor'],[jsstyle='backgroundColor']").click(function(){
		JcssPicker.pickColor(this, null, this.value);		
	});
}

  

原文地址:https://www.cnblogs.com/xuxian/p/4208318.html