javascript实现颜色渐变的方法


Posted in Javascript onOctober 30, 2013

渐变(Gradient)是美学中一条重要的形式美法则,与其相对应的是突变。形状、大小、位置、方向、色彩等视觉因素都可以进行渐变。在色彩中,色相、明度、纯度也都可以产生渐变效果,并会表现出具有丰富层次的美感。本文主要讲述两种颜色RGB数值的渐变算法。

已知:A=50,B=200,A、B之间平均分成3份(Step=3),求每份的数值(StepN)分别是多少。

公式:Gradient = A + (B-A) / Step * N

注]编程时为了提高效率避免浮点运算,往往把除法放在最后面,这样公式就成了:Gradient = A + (B-A) * N / Step

Step=3时,根据公式可以求出Step1=A+(A-B)/3*1=50+(200-50)/3=100,Step2=A+(A-B)/3*2=50+(200-50)/3*2=150。这就是均匀渐变的算法原理了,很简单,小学知识。

两种颜色的渐变就是对两种颜色的RGB通道分别进行这样的计算,例如两种颜色分别是RGB(200,50,0)和RGB(50,200,0),用上述公式进行计算就是:

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)。

网页中的渐变文字特效就是这么做出来的。例如你的网页HTML中有这么一句代码:<span id=myText>你就是我天空里最美丽的彩虹</span>,在后面加入如下的代码就可以实现渐变文字。(生成渐变的两种颜色:#c597ff和#73e7a9)

var ColorA = "#c597ff";
var ColorB = "#73e7a9";
// 颜色#FF00FF格式转为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)格式转为#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通道分别进行计算
  {
   Gradient[c] = A[c] + (B[c]-A[c]) / Step * N;
  }
  result += "<font color=" + rgb2color(Gradient) +
   ">" + str.charAt(N) + "</font>";
 }
 myText.innerHTML = result;
}
gradient(); // 运行程序

A、B、C三种颜色或多种颜色的渐变,理论上讲只要先把A、B进行渐变,再把B、C进行渐变,依此类推就行了。实践过程中,为了使渐变的每个像素颜色分布均匀,产生了多种插值算法,具体算法以后再讨论吧。

Javascript 相关文章推荐
仿jQuery的siblings效果的js代码
Aug 09 Javascript
jQuery中get和post方法传值测试及注意事项
Aug 08 Javascript
js读取csv文件并使用json显示出来
Jan 09 Javascript
编写自己的jQuery提示框(Tip)插件
Feb 05 Javascript
jQuery插件MixItUp实现动画过滤和排序
Apr 12 Javascript
jquery对象访问是什么及使用方法介绍
May 03 Javascript
使用cookie绕过验证码登录的实现代码
Oct 12 Javascript
如何重置vue打印变量的显示方式
Dec 06 Javascript
在vue中使用css modules替代scroped的方法
Mar 10 Javascript
javascript实现简单搜索功能
Mar 26 Javascript
TypeScript的安装、使用、自动编译的实现
Apr 10 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
Dec 30 Vue.js
window.onload和$(function(){})的区别介绍
Oct 30 #Javascript
js history对象简单实现返回和前进
Oct 30 #Javascript
js 3种归并操作的实例代码
Oct 30 #Javascript
javascript获取选中的文本的方法代码
Oct 30 #Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 #Javascript
js实现收缩菜单效果实例代码
Oct 30 #Javascript
比较新旧两个数组值得增加和删除的JS代码
Oct 30 #Javascript
You might like
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
php 多文件上传的实现实例
2016/10/23 PHP
PHP chr()函数讲解
2019/02/11 PHP
经验几则 推荐
2006/09/05 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
详解JavaScript中的Object.is()与&quot;===&quot;运算符总结
2020/06/17 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
Python实现发送email的几种常用方法
2014/08/18 Python
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
用python绘制樱花树
2020/10/09 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
法律专业个人实习自我鉴定
2013/09/23 职场文书
大学生怎样进行自我评价
2013/12/07 职场文书
出国签证在职证明
2014/01/16 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
大学生校园创业计划书
2014/02/08 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
绩效考核实施方案
2014/03/18 职场文书
2014年终个人总结报告
2015/03/09 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
党员转正党支部意见
2015/06/02 职场文书
python库sklearn常用操作
2021/08/23 Python