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 相关文章推荐
屏蔽F1~F12的快捷键的js函数
May 06 Javascript
chrome原生方法之数组
Nov 30 Javascript
JS实现匀速运动的代码实例
Nov 29 Javascript
拥有一个属于自己的javascript表单验证插件
Mar 24 Javascript
jQuery弹出div层过2秒自动消失
Nov 29 Javascript
webpack实现热更新(实施同步刷新)
Jul 28 Javascript
JS实现的判断方法、变量是否存在功能示例
Mar 28 Javascript
vue filters的使用详解
Jun 11 Javascript
vue弹窗组件的实现示例代码
Sep 10 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
Apr 16 Javascript
vue实现微信获取用户信息的方法
Mar 21 Javascript
node.js如何自定义实现一个EventEmitter
Jul 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+MySQL 制作简单的留言本
2009/11/02 PHP
来自phpguru得Php Cache类源码
2010/04/15 PHP
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
使用Python的PEAK来适配协议的教程
2015/04/14 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
python 字符串和整数的转换方法
2018/06/25 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Python如何读取文件中图片格式
2020/01/13 Python
python退出循环的方法
2020/06/18 Python
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
车间主管岗位职责
2013/11/14 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
大学社团活动总结
2014/04/26 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
学校党支部承诺书
2015/04/30 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
十七岁的单车观后感
2015/06/12 职场文书
教师节校长致辞
2015/07/31 职场文书
MySQL读取JSON转换的方式
2022/03/18 MySQL