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 相关文章推荐
Chosen 基于jquery的选择框插件使用方法
May 30 Javascript
setTimeout和setInterval的深入理解
Nov 08 Javascript
jQuery中nextAll()方法用法实例
Jan 07 Javascript
详细探究ES6之Proxy代理
Jul 22 Javascript
ionic实现滑动的三种方式
Aug 27 Javascript
vue单个组件实现无限层级多选菜单功能
Apr 10 Javascript
微信小程序自定义底部弹出框
Nov 16 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
Aug 01 Javascript
详解vue-cli脚手架中webpack配置方法
Aug 22 Javascript
layDate日期控件使用方法详解
Nov 15 Javascript
Vue侦测相关api的实现方法
May 22 Javascript
VUE渲染后端返回含有script标签的html字符串示例
Oct 28 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php 带逗号千位符数字的处理方法
2012/01/10 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
python小技巧之批量抓取美女图片
2014/06/06 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
python无序链表删除重复项的方法
2020/01/17 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
请用用Java代码写一个堆栈
2012/01/26 面试题
优秀应届毕业生推荐信
2014/02/18 职场文书
学校后勤岗位职责
2014/02/19 职场文书
信息管理应届生求职信
2014/03/07 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
植树节标语
2014/06/27 职场文书
同学会邀请函模板
2015/01/30 职场文书
党支部书记岗位职责
2015/02/15 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
走进科学观后感
2015/06/18 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
mysql如何配置白名单访问
2021/06/30 MySQL
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python