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 相关文章推荐
js chrome浏览器判断代码
Mar 28 Javascript
javascript获得服务器端控件的ID的实现代码
Dec 28 Javascript
js实现特定位取反原理及示例
Jun 30 Javascript
判断日期是否能跨月查询的js代码
Jul 25 Javascript
jQuery.each使用详解
Jul 07 Javascript
js变形金刚文字特效代码分享
Aug 20 Javascript
jQuery使用$.ajax进行即时验证实例详解
Dec 11 Javascript
JavaScript必知必会(九)function 说起 闭包问题
Jun 08 Javascript
JavaScript中for循环的几种写法与效率总结
Feb 03 Javascript
详解Vue 事件驱动和依赖追踪
Apr 22 Javascript
JavaScript实现Tab选项卡切换
Feb 13 Javascript
vue 实现弹窗关闭后刷新效果
Apr 08 Vue.js
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递归创建和删除文件夹的代码小结
2012/04/13 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
Javascript this 的一些学习总结
2012/08/02 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
web.py获取上传文件名的正确方法
2014/08/26 Python
Python字符串和文件操作常用函数分析
2015/04/08 Python
python通过文件头判断文件类型
2015/10/30 Python
Python算法应用实战之栈详解
2017/02/04 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
python super()函数的基本使用
2020/09/10 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
教师专业理论水平的自我评价分享
2013/11/09 职场文书
优秀德育工作者事迹材料
2014/05/07 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
倡议书格式
2014/08/30 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python
python数字转对应中文的方法总结
2021/08/02 Python
聊聊redis-dump工具安装问题
2022/01/18 Redis
使用 Apache 反向代理的设置技巧
2022/01/18 Servers
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js