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 相关文章推荐
ExtJS 下拉多选框lovcombo
May 19 Javascript
jquery如何改变html标签的样式(两种实现方法)
Jan 16 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
Apr 15 Javascript
JS操作JSON要领详细总结
Aug 25 Javascript
javascript抽象工厂模式详细说明
Dec 16 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
May 09 jQuery
利用Vue实现一个markdown编辑器实例代码
May 19 Javascript
详解vuex之store源码简单解析
Jun 13 Javascript
JS数组方法slice()用法实例分析
Jan 18 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
Aug 10 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
Sep 11 Javascript
JS精髓原型链继承及构造函数继承问题纠正
Jun 16 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简单读取PDF页数的实现方法
2016/07/21 PHP
DWR Ext 加载数据
2009/03/22 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
JSON 必知必会 观后记
2016/10/27 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
python实现微信远程控制电脑
2018/02/22 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
Python 实现数组相减示例
2019/12/27 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
创业计划书如何编写
2014/02/06 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
歌剧魅影观后感
2015/06/05 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书