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 相关文章推荐
如何获取网站icon有哪些可行的方法
Jun 05 Javascript
一段非常简单的js判断浏览器的内核
Aug 17 Javascript
使用jquery制作弹出框效果
Apr 03 Javascript
js格式化时间的方法
Dec 18 Javascript
JavaScript File API文件上传预览
Feb 02 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
Bootstrap缩略图与警告框学习使用
Feb 08 Javascript
Bootstrap实现的标签页内容切换显示效果示例
May 25 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
Sep 14 Javascript
浅谈angular4实际项目搭建总结
Dec 01 Javascript
分析javascript原型及原型链
Mar 18 Javascript
vue proxy 的优势与使用场景实现
Jun 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类(查找/修改)xml文档
2013/03/26 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
基于node实现websocket协议
2016/04/25 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
react-router中的属性详解
2017/06/01 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
详解Python中heapq模块的用法
2016/06/28 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
AUC计算方法与Python实现代码
2020/02/28 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
学院书画协会部门岗位职责
2013/12/01 职场文书
美术教师自我鉴定
2014/02/12 职场文书
体育教师求职信
2014/05/24 职场文书
乡镇防汛工作汇报
2014/10/28 职场文书
整改落实自查报告
2014/11/05 职场文书
材料采购员岗位职责
2015/04/03 职场文书
小学教学工作总结2015
2015/05/13 职场文书
学校财务管理制度
2015/08/04 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL