javascript
JS 处理十六进制颜色渐变算法-输入颜色,输出渐变rgb数组
html顏色有幾種表示方式:
英文單詞顏色值:background-color:Blue;
十六進(jìn)制顏色值:background-color:#FFFFFF;?
RGB顏色值三元數(shù)字:background-color:rgb(255,255,255)
RGB顏色值三元百分比:background-color:rgb(100%,100%,100%)
本文講述輸入兩個(gè)十六進(jìn)制顏色,輸出rgb漸變數(shù)組的算法。
?html部分:
<body><form id="form1" runat="server"><div id ="test_color"></div></form> </body>JavaScript部分:
漸變色處理函數(shù)思路:
已知:RStart=50,REnd=200,RStart、REnd之間平均分成3份(Step=3),求每份的數(shù)值(StepN)分別是多少。
公式:Gradient = RStart+ (REnd-RStart) / Step * N (第N步的顏色rgb中R的值)
實(shí)現(xiàn)方法非常簡單,只是需要將顏色從rgb到hex的互轉(zhuǎn)。
?? 輸入:
?????startColor:? 十六進(jìn)制開始顏色
???? endColor:? 十六進(jìn)制結(jié)束顏色
???? step: 漸變分的步數(shù)
?? 輸出:漸變顏色rgb數(shù)組
function gradientColor(startColor, endColor, step) {startRGB = this.colorRgb(startColor);//轉(zhuǎn)換為rgb數(shù)組模式startR = startRGB[0];startG = startRGB[1];startB = startRGB[2];endRGB = this.colorRgb(endColor);endR = endRGB[0];endG = endRGB[1];endB = endRGB[2];sR = (endR - startR) / step;//總差值sG = (endG - startG) / step;sB = (endB - startB) / step;var colorArr = [];for (var i = 0; i < step; i++) {//計(jì)算每一步的hex值 var hex = this.colorHex('rgb('+ parseInt((sR * i + startR))+ ',' + parseInt((sG * i + startG))+ ',' + parseInt((sB * i + startB)) + ')');colorArr.push(hex);}return colorArr;}漸變色函數(shù)屬性:
// 將hex表示方式轉(zhuǎn)換為rgb表示方式(這里返回rgb數(shù)組模式)gradientColor.prototype.colorRgb = function (sColor) {var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;var sColor = sColor.toLowerCase();if (sColor && reg.test(sColor)) {if (sColor.length === 4) {var sColorNew = "#";for (var i = 1; i < 4; i += 1) {sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));}sColor = sColorNew;}//處理六位的顏色值var sColorChange = [];for (var i = 1; i < 7; i += 2) {sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));}return sColorChange;} else {return sColor;}};// 將rgb表示方式轉(zhuǎn)換為hex表示方式gradientColor.prototype.colorHex = function (rgb) {var _this = rgb;var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;if (/^(rgb|RGB)/.test(_this)) {var aColor = _this.replace(/(?:(|)|rgb|RGB)*/g, "").split(",");var strHex = "#";for (var i = 0; i < aColor.length; i++) {var hex = Number(aColor[i]).toString(16);hex = hex < 10 ? 0 + '' + hex : hex;// 保證每個(gè)rgb的值為2位if (hex === "0") {hex += hex;}strHex += hex;}if (strHex.length !== 7) {strHex = _this;}return strHex;} else if (reg.test(_this)) {var aNum = _this.replace(/#/, "").split("");if (aNum.length === 6) {return _this;} else if (aNum.length === 3) {var numHex = "#";for (var i = 0; i < aNum.length; i += 1) {numHex += (aNum[i] + aNum[i]);}return numHex;}} else {return _this;}} View Code
頁面加載腳本,生成div,輸入開始顏色,結(jié)束顏色,生成漸變色數(shù)組,賦值為背景色,
生成的結(jié)果如下圖:
從紅色漸變?yōu)榫G色:
?
參考: http://yanue.net/post-80.html
?版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請注明出處。http://www.cnblogs.com/SweetMemory/p/6274388.html
轉(zhuǎn)載于:https://www.cnblogs.com/SweetMemory/p/6274388.html
總結(jié)
以上是生活随笔為你收集整理的JS 处理十六进制颜色渐变算法-输入颜色,输出渐变rgb数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring MVC初始化参数绑定
- 下一篇: SpringMVC(十一) Reques