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鼠标和滚轮事件
Jun 27 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
Jan 23 Javascript
JS取request值以及自动执行使用示例
Feb 24 Javascript
js限制checkbox选中个数以限制六个为例
Jul 15 Javascript
基于replaceChild制作简单的吞噬特效
Sep 21 Javascript
jQuery的each循环用法简单示例
Jun 12 Javascript
一个简单的JavaScript Map实例(分享)
Aug 03 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
Sep 06 Javascript
详解node.js搭建代理服务器请求数据
Apr 08 Javascript
前端把html表格生成为excel表格的实例
Sep 19 Javascript
checkbox在vue中的用法小结
Nov 13 Javascript
详解JS取出两个数组中的不同或相同元素
Mar 20 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
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
基于jQuery拖拽事件的封装
2020/11/29 jQuery
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
python实现ip地址的包含关系判断
2020/02/07 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
python如何爬取网页中的文字
2020/07/28 Python
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
婚礼答谢礼品
2015/01/20 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
超市收银员岗位职责
2015/04/07 职场文书
师德承诺书2015
2015/04/28 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python