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 获得服务器控件值的方法小结
May 11 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
Aug 27 Javascript
利用jquery的获取JS文件中的字符串内容
Feb 14 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
Mar 19 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
Jan 21 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
May 10 Javascript
jQuery实现图像旋转动画效果
May 29 Javascript
原生js实现节日时间倒计时功能
Jan 18 Javascript
Node.js操作系统OS模块用法分析
Jan 04 Javascript
详解基于electron制作一个node压缩图片的桌面应用
Jan 29 Javascript
JS实现简单日历特效
Jan 03 Javascript
JavaScript内置对象之Array的使用小结
May 12 Javascript
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实现智能文件类型检测的实现代码
2011/08/02 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
js不是基础的基础
2006/12/24 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
web.py获取上传文件名的正确方法
2014/08/26 Python
python实现堆栈与队列的方法
2015/01/15 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
石油工程专业毕业生求职信
2014/04/13 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
2015年父亲节寄语
2015/03/23 职场文书
值班管理制度范本
2015/08/06 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
Python读取和写入Excel数据
2022/04/20 Python