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 相关文章推荐
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
Dec 07 Javascript
JavaScript学习笔记(十)
Jan 17 Javascript
jQuery实现id模糊查询的小例子
Mar 19 Javascript
JS去除右边逗号的简单方法
Jul 03 Javascript
js查找某元素中的所有图片地址的方法
Jan 16 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 Javascript
Node.js实现文件上传
Jul 05 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
Jan 19 Javascript
ES6新特性一: let和const命令详解
Apr 20 Javascript
vue2中filter()的实现代码
Jul 09 Javascript
vue与iframe之间的信息交互的实现
Apr 08 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绘制在图片上的正余弦曲线
2013/06/08 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
jQuery实现左右滑动的toggle方法
2018/03/03 jQuery
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
Python enumerate遍历数组示例应用
2008/09/06 Python
python快速排序代码实例
2013/11/21 Python
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
更改Ubuntu默认python版本的两种方法python-&gt; Anaconda
2016/12/18 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
实习护士自我鉴定
2013/10/13 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
标准发言稿结尾
2019/07/18 职场文书
css3带你实现3D转换效果
2022/02/24 HTML / CSS
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python