本文实例讲述了JS实现颜色梯度与渐变效果的方法。分享给大家供大家参考,具体如下:

运行效果图如下:
完整实例代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript 颜色梯度和渐变效果</title>
<script type="text/javascript">
var $ = function (id) {
return "string" == typeof id ? document.getElementById(id) : id;
};
var Extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
}
var Map = function(array, callback, thisObject){
if(array.map){
return array.map(callback, thisObject);
}else{
var res = [];
for (var i = 0, len = array.length; i < len; i++) { res.push(callback.call(thisObject, array[i], i, array)); }
return res;
}
}
var ColorGrads = function(options){
this.SetOptions(options);
this.StartColor = this.options.StartColor;
this.EndColor = this.options.EndColor;
this.Step = Math.abs(this.options.Step);
};
ColorGrads.prototype = {
//设置默认属性
SetOptions: function(options) {
this.options = {//默认值
StartColor: "#fff",//开始颜色
EndColor: "#000",//结束颜色
Step: 20//渐变级数
};
Extend(this.options, options || {});
},
//获取渐变颜色集合
Create: function() {
var colors = [],
startColor = this.GetColor(this.StartColor),
endColor = this.GetColor(this.EndColor),
stepR = (endColor[0] - startColor[0]) / this.Step,
stepG = (endColor[1] - startColor[1]) / this.Step,
stepB = (endColor[2] - startColor[2]) / this.Step;
//生成颜色集合
for(var i = 0, n = this.Step, r = startColor[0], g = startColor[1], b = startColor[2]; i < n; i++){
colors.push([r, g, b]); r += stepR; g += stepG; b += stepB;
}
colors.push(endColor);
//修正颜色值
return Map(colors, function(x){ return Map(x, function(x){
return Math.min(Math.max(0, Math.floor(x)), 255);
});});
},
//获取颜色数据
GetColor: function(color) {
if(/^#[0-9a-f]{6}$/i.test(color))
{//#rrggbb
return Map([color.substr(1, 2), color.substr(3, 2), color.substr(5, 2)],
function(x){ return parseInt(x, 16); }
)
}
else if(/^#[0-9a-f]{3}$/i.test(color))
{//#rgb
return Map([color.substr(1, 1), color.substr(2, 1), color.substr(3, 1)],
function(x){ return parseInt(x + x, 16); }
)
}
else if(/^rgb(.*)$/i.test(color))
{//rgb(n,n,n) or rgb(n%,n%,n%)
return Map(color.match(/\d+(\.\d+)?\%?/g),
function(x){ return parseInt(x.indexOf("%") > 0 ? parseFloat(x, 10) * 2.55 : x, 10); }
)
}
else
{//color
var mapping = {"red":"#FF0000"};//略
color = mapping[color.toLowerCase()];
if(color){
return Map([color.substr(1, 2), color.substr(3, 2), color.substr(5, 2)],
function(x){ return parseInt(x, 16); }
)
}
}
}
};
var CurrentStyle = function(element){
return element.currentStyle || document.defaultView.getComputedStyle(element, null);
}
var Bind = function(object, fun) {
var args = Array.prototype.slice.call(arguments).slice(2);
return function() {
return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));
}
}
//渐变对象
var ColorTrans = function(obj, options){
this._obj = $(obj);
this._timer = null;//定时器
this._index = 0;//索引
this._colors = [];//颜色集合
this._grads = new ColorGrads();
this.SetOptions(options);
this.Speed = Math.abs(this.options.Speed);
this.CssColor = this.options.CssColor;
this._startColor = this.options.StartColor || CurrentStyle(this._obj)[this.CssColor];
this._endColor = this.options.EndColor;
this._step = Math.abs(this.options.Step);
this.Reset();
this.SetColor();
};
ColorTrans.prototype = {
//设置默认属性
SetOptions: function(options) {
this.options = {//默认值
StartColor: "",//开始颜色
EndColor: "#000",//结束颜色
Step: 20,//渐变级数
Speed: 20,//渐变速度
CssColor: "color"//设置属性(Scripting属性)
};
Extend(this.options, options || {});
},
//重设颜色集合
Reset: function(color) {
//修改颜色后必须重新获取颜色集合
color = Extend({ StartColor: this._startColor, EndColor: this._endColor, Step: this._step }, color || {});
//设置属性
this._grads.StartColor = this._startColor = color.StartColor;
this._grads.EndColor = this._endColor = color.EndColor;
this._grads.Step = this._step = color.Step;
//获取颜色集合
this._colors = this._grads.Create();
this._index = 0;
},
//颜色渐入
FadeIn: function() {
this.Stop(); this._index++; this.SetColor();
if(this._index < this._colors.length - 1){
this._timer = setTimeout(Bind(this, this.FadeIn), this.Speed);
}
},
//颜色渐出
FadeOut: function() {
this.Stop(); this._index--; this.SetColor();
if(this._index > 0){
this._timer = setTimeout(Bind(this, this.FadeOut), this.Speed);
}
},
//颜色设置
SetColor: function() {
var color = this._colors[Math.min(Math.max(0, this._index), this._colors.length - 1)];
this._obj.style[this.CssColor] = "rgb(" + color[0] + "," + color[1] + "," + color[2] + ")";
},
//停止
Stop: function() {
clearTimeout(this._timer);
}
};
</script>
</head>
<body>
<style type="text/css">
#idGrads{}
#idGrads div{ font-size:0;height:1px;}
</style>
<div id="idGrads"> </div>
<script>
var forEach = function(array, callback, thisObject){
if(array.forEach){
array.forEach(callback, thisObject);
}else{
for (var i = 0, len = array.length; i < len; i++) { callback.call(thisObject, array[i], i, array); }
}
}
var colors = new ColorGrads({ StartColor: "#fff", EndColor: "rgb(20,127,0)" }).Create();
forEach(colors.concat().concat(colors.reverse()), function(x){
$("idGrads").innerHTML += "<div style=\"background-color:"+"rgb(" + x[0] + "," + x[1] + "," + x[2] + ");\"></div>";
})
</script>
<Br />
<Br />
<style type="text/css">
#idMenu{ background:#DBDBDB;text-align:center;line-height:25px; table-layout:fixed;}
#idMenu td{ cursor:pointer;}
</style>
<table id="idMenu" width="600" border="0" cellspacing="5" cellpadding="0">
<tr>
<td onclick="location.href='#'">Cropper</td>
<td onclick="location.href='#'">Tween</td>
<td onclick="location.href='#'">Slider</td>
<td onclick="location.href='#'">Resize</td>
<td onclick="location.href='#'">Drag</td>
</tr>
</table>
<script>
forEach($("idMenu").getElementsByTagName("td"), function(x, i){
var ct1 = new ColorTrans(x, { StartColor: "#666", EndColor: "#fff" });
var ct2 = new ColorTrans(x, { StartColor: "#f6f6f6", EndColor: "rgb(20,150,0)", CssColor: "backgroundColor" });
x.onmouseover = function(){ ct1.FadeIn(); ct2.FadeIn(); }
x.onmouseout = function(){ ct1.FadeOut(); ct2.FadeOut(); }
})
</script>
<Br />
<Br />
<div id="idRandom" style="padding:10px;color:#fff; background-color:#CCC;">点击随机换颜色</div>
<script>
var ctRandom = new ColorTrans("idRandom", { EndColor: "#CCC", CssColor: "backgroundColor" })
$("idRandom").onclick = function(){
var rgb = Map([1,1,1], function(){ return Math.floor((Math.random() * 255)); } );
ctRandom.Reset({ StartColor: this.style.backgroundColor, EndColor: "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")" })
ctRandom.FadeIn();
}
</script>
</body>
</html>
PS:这里再为大家推荐几款本站的相关在线工具:
在线RGB、HEX颜色代码生成器:
http://tools./color/rgb_color_generator
RGB颜色查询对照表_颜色代码表_颜色的英文名称大全:
http://tools./color/jPicker
在线网页调色板工具:
http://tools./color/color_picker
在线颜色选择器工具/RGB颜色查询对照表:
http://tools./color/colorpicker
更多关于JavaScript相关内容可查看本站专题:《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# JS
# 颜色
# 梯度
# 渐变
# js实现颜色阶梯渐变效果(Gradient算法)
# JavaScript实现的鼠标响应颜色渐变效果完整实例
# jQuery与js实现颜色渐变的方法
# 漂亮! js实现颜色渐变效果
# 使用three.js 画渐变的直线
# 神奇!js+CSS+DIV实现文字颜色渐变效果
# js实现有过渡渐变效果的图片轮播相册(兼容IE
# ff)
# javascript计算渐变颜色的实例
# 默认值
# 对照表
# 相关内容
# 遍历
# 数据结构
# 给大家
# 更多关于
# 所述
# 几款
# 程序设计
# 再为
# 渐入
# 选择器
# 代码生成器
# 讲述了
# SetOptions
# StartColor
# EndColor
# call
# ColorGrads
相关文章:
如何解决VPS建站LNMP环境配置常见问题?
如何在腾讯云服务器快速搭建个人网站?
如何生成腾讯云建站专用兑换码?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何确保西部建站助手FTP传输的安全性?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
哈尔滨网站建设策划,哈尔滨电工证查询网站?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何在搬瓦工VPS快速搭建网站?
如何用免费手机建站系统零基础打造专业网站?
如何在万网自助建站中设置域名及备案?
常州企业建站如何选择最佳模板?
安云自助建站系统如何快速提升SEO排名?
建站之星导航配置指南:自助建站与SEO优化全解析
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
重庆市网站制作公司,重庆招聘网站哪个好?
山东网站制作公司有哪些,山东大源集团官网?
网站专业制作公司有哪些,做一个公司网站要多少钱?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
,巨量百应是干嘛的?
建站之星如何保障用户数据免受黑客入侵?
网站制作免费,什么网站能看正片电影?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
广东企业建站网站优化与SEO营销核心策略指南
如何用PHP快速搭建高效网站?分步指南
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
建站主机选购指南与交易推荐:核心配置解析
如何快速搭建个人网站并优化SEO?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
制作网站的基本流程,设计网站的软件是什么?
建站之星如何助力网站排名飙升?揭秘高效技巧
建站之星安装路径如何正确选择及配置?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
如何在IIS中新建站点并解决端口绑定冲突?
网站按钮制作软件,如何实现网页中按钮的自动点击?
如何通过cPanel快速搭建网站?
C#如何使用XPathNavigator高效查询XML
手机网站制作与建设方案,手机网站如何建设?
深圳网站制作的公司有哪些,dido官方网站?
红河网站制作公司,红河事业单位身份证如何上传?
网站制作公司排行榜,抖音怎样做个人官方网站
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
建站之星收费标准详解:套餐费用及年费价格表一览
如何通过虚拟主机快速完成网站搭建?
开源网站制作软件,开源网站什么意思?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
香港服务器租用费用高吗?如何避免常见误区?
*请认真填写需求信息,我们会在24小时内与您取得联系。