javascript實(shí)現(xiàn)顏色漸變的方法
漸變(Gradient)是美學(xué)中一條重要的形式美法則,與其相對(duì)應(yīng)的是突變。形狀、大小、位置、方向、色彩等視覺因素都可以進(jìn)行漸變。在色彩中,色相、明度、純度也都可以產(chǎn)生漸變效果,并會(huì)表現(xiàn)出具有豐富層次的美感。本文主要講述兩種顏色RGB數(shù)值的漸變算法。
已知:A=50,B=200,A、B之間平均分成3份(Step=3),求每份的數(shù)值(StepN)分別是多少。
公式:Gradient = A + (B-A) / Step * N
注]編程時(shí)為了提高效率避免浮點(diǎn)運(yùn)算,往往把除法放在最后面,這樣公式就成了:Gradient = A + (B-A) * N / Step
Step=3時(shí),根據(jù)公式可以求出Step1=A+(A-B)/3*1=50+(200-50)/3=100,Step2=A+(A-B)/3*2=50+(200-50)/3*2=150。這就是均勻漸變的算法原理了,很簡(jiǎn)單,小學(xué)知識(shí)。
兩種顏色的漸變就是對(duì)兩種顏色的RGB通道分別進(jìn)行這樣的計(jì)算,例如兩種顏色分別是RGB(200,50,0)和RGB(50,200,0),用上述公式進(jìn)行計(jì)算就是:
RStep1=RA=RA+(BA-RA)/Step*N=200+(50-200)/3*1=200-50=150
GStep1=GA=GA+(GA-GA)/Step*N=50+(200-50)/3*1=50+50=100
BStep1=BA=BA+(BA-BA)/Step*N=0
因此RGBStep1=(150,100,0),同樣的方法可以求出RGBStep2=(100,150,0)。
網(wǎng)頁中的漸變文字特效就是這么做出來的。例如你的網(wǎng)頁HTML中有這么一句代碼:<span id=myText>你就是我天空里最美麗的彩虹</span>,在后面加入如下的代碼就可以實(shí)現(xiàn)漸變文字。(生成漸變的兩種顏色:#c597ff和#73e7a9)
var ColorA = "#c597ff";
var ColorB = "#73e7a9";
// 顏色#FF00FF格式轉(zhuǎn)為Array(255,0,255)
function color2rgb(color)
{
var r = parseInt(color.substr(1, 2), 16);
var g = parseInt(color.substr(3, 2), 16);
var b = parseInt(color.substr(5, 2), 16);
return new Array(r, g, b);
}
// 顏色Array(255,0,255)格式轉(zhuǎn)為#FF00FF
function rgb2color(rgb)
{
var s = "#";
for (var i = 0; i < 3; i++)
{
var c = Math.round(rgb[i]).toString(16);
if (c.length == 1)
c = '0' + c;
s += c;
}
return s.toUpperCase();
}
// 生成漸變
function gradient()
{
var str = myText.innerText;
var result = "";
var Step = str.length - 1;
var Gradient = new Array(3);
var A = color2rgb(ColorA);
var B = color2rgb(ColorB);
for (var N = 0; N <= Step; N++)
{
for (var c = 0; c < 3; c++) // RGB通道分別進(jìn)行計(jì)算
{
Gradient[c] = A[c] + (B[c]-A[c]) / Step * N;
}
result += "<font color=" + rgb2color(Gradient) +
">" + str.charAt(N) + "</font>";
}
myText.innerHTML = result;
}
gradient(); // 運(yùn)行程序
A、B、C三種顏色或多種顏色的漸變,理論上講只要先把A、B進(jìn)行漸變,再把B、C進(jìn)行漸變,依此類推就行了。實(shí)踐過程中,為了使?jié)u變的每個(gè)像素顏色分布均勻,產(chǎn)生了多種插值算法,具體算法以后再討論吧。
- JS Tween 顏色漸變
- 利用遞增的數(shù)字返回循環(huán)漸變的顏色的js代碼
- js+HTML5實(shí)現(xiàn)canvas多種顏色漸變效果的方法
- js實(shí)現(xiàn)按鈕顏色漸變動(dòng)畫效果
- JS實(shí)現(xiàn)的顏色實(shí)時(shí)漸變效果完整實(shí)例
- 神奇!js+CSS+DIV實(shí)現(xiàn)文字顏色漸變效果
- 漂亮! js實(shí)現(xiàn)顏色漸變效果
- JavaScript 顏色梯度和漸變效果
- Javascript 顏色漸變效果的實(shí)現(xiàn)代碼
- js實(shí)現(xiàn)顏色階梯漸變效果(Gradient算法)
相關(guān)文章
JS Loading功能的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了JS Loading功能的簡(jiǎn)單實(shí)現(xiàn)。這個(gè)功能原理是很簡(jiǎn)單的,就是一個(gè)DIV遮蓋當(dāng)前頁面,然后Loading就在遮蓋DIV層上展示出來2013-11-11js中flexible.js實(shí)現(xiàn)淘寶彈性布局方案
這篇文章主要為大家詳細(xì)介紹了js中flexible.js實(shí)現(xiàn)淘寶彈性布局方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12js使用generator函數(shù)同步執(zhí)行ajax任務(wù)
這篇文章主要為大家詳細(xì)介紹了js使用generator函數(shù)同步執(zhí)行ajax任務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09淺談webpack打包過程中因?yàn)閳D片的路徑導(dǎo)致的問題
下面小編就為大家分享一篇淺談webpack打包過程中因?yàn)閳D片的路徑導(dǎo)致的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02詳解如何使用webpack打包多頁jquery項(xiàng)目
這篇文章主要介紹了詳解如何使用webpack打包多頁jquery項(xiàng)目,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02Grunt入門教程(自動(dòng)任務(wù)運(yùn)行器)
Grunt是一個(gè)自動(dòng)任務(wù)運(yùn)行器,會(huì)按照預(yù)先設(shè)定的順序自動(dòng)運(yùn)行一系列的任務(wù)。這可以簡(jiǎn)化工作流程,減輕重復(fù)性工作帶來的負(fù)擔(dān)2015-08-08JS實(shí)現(xiàn)OCX控件的事件響應(yīng)示例
JS支持OCX控件的事件(event),當(dāng)OCX控件定義的事件發(fā)生時(shí),JS可以捕獲該事件并對(duì)事件進(jìn)行相應(yīng)的處理2014-09-09