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中几种常见排序算法小结
Feb 22 Javascript
javascript unicode与GBK2312(中文)编码转换方法
Nov 14 Javascript
CSS图片响应式 垂直水平居中
Aug 14 Javascript
JavaScript Math 对象常用方法总结
Apr 28 Javascript
JavaScript检测原始值、引用值、属性
Jun 20 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
Apr 23 jQuery
详解Vue 方法与事件处理器
Jun 20 Javascript
js 发布订阅模式的实例讲解
Sep 10 Javascript
AngularJS创建一个上传照片的指令实例代码
Feb 24 Javascript
JavaScript 中的 this 工作原理
Jun 20 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
Oct 09 Javascript
vue路由传参的基本实现方式小结【三种方式】
Feb 05 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/05/18 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
语义化 H1 标签
2008/01/14 Javascript
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
python数据结构树和二叉树简介
2014/04/29 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
Python字符串处理实现单词反转
2017/06/14 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
Python解析多帧dicom数据详解
2020/01/13 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
详解python with 上下文管理器
2020/09/02 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
作风建设年活动实施方案
2014/10/24 职场文书
2014年财政工作总结
2014/12/10 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
语文复习计划
2015/01/19 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
摩登时代观后感
2015/06/03 职场文书
离职信范文
2015/06/23 职场文书