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 相关文章推荐
我的javascript 函数链之演变
Apr 07 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
深入分析JQuery和JavaScript的异同
Oct 23 Javascript
jQuery Masonry瀑布流插件使用详解
Nov 17 Javascript
javascript删除元素节点removeChild()用法实例
May 26 Javascript
js实现表单多按钮提交action的处理方法
Oct 24 Javascript
JS制作适用于手机和电脑的通知信息效果
Oct 28 Javascript
微信小程序 欢迎页面的制作(源码下载)
Jan 09 Javascript
BootStrapValidator初使用教程详解
Feb 10 Javascript
Bootstrap Table从零开始
Jun 30 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
Apr 09 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
Aug 15 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 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
PHP学习笔记之session
2018/05/06 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
JS hashMap实例详解
2016/05/26 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
在python中用url_for构造URL的方法
2019/07/25 Python
django自带调试服务器的使用详解
2019/08/29 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
优乐美广告词
2014/03/14 职场文书
品质标语大全
2014/06/21 职场文书
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL