js实现颜色阶梯渐变效果(Gradient算法)


Posted in Javascript onMarch 21, 2017

html中颜色可以使用rgb和hex方式来表示。

在色彩中,色相、明度、纯度也都可以产生渐变效果,并会表现出具有丰富层次的美感。本文主要讲述两种颜色RGB数值的梯级渐变算法。

其中如如16进制颜色如#336600分别表示rgb模式中r的值为16进制33(即),g的值为16进制的66,和b为16进制的00,转换后用rgb完整表述为:rgb(51,102,0)。

其中使用16进制进行加减乘除不方便,尤其还使用了rgb的16进制颜色组合(#336600)。因此我们可以将16进制转换为rgb单个进行梯级运算在进行组合。

已知:RStart=50,REnd=200,RStart、REnd之间平均分成3份(Step=3),求每份的数值(StepN)分别是多少。

公式:Gradient = RStart+ (REnd-RStart) / Step * N (第N步的颜色rgb中R的值)

实现方法非常简单,只是需要将颜色从rgb到hex的互转。

实现代码:

<script type="text/javascript">
 /*
 // 作者 yanue
 // 参数:
 // startColor:开始颜色hex
 // endColor:结束颜色hex
 // step:几个阶级(几步)
 */
 function gradientColor(startColor,endColor,step){
  startRGB = this.colorRgb(startColor);//转换为rgb数组模式
  startR = startRGB[0];
  startG = startRGB[1];
  startB = startRGB[2];
  endRGB = this.colorRgb(endColor);
  endR = endRGB[0];
  endG = endRGB[1];
  endB = endRGB[2];
  sR = (endR-startR)/step;//总差值
  sG = (endG-startG)/step;
  sB = (endB-startB)/step;
  var colorArr = [];
  for(var i=0;i<step;i++){
  //计算每一步的hex值 
   var hex = this.colorHex('rgb('+parseInt((sR*i+startR))+','+parseInt((sG*i+startG))+','+parseInt((sB*i+startB))+')');
   colorArr.push(hex);
  }
  return colorArr;
 }
 // 将hex表示方式转换为rgb表示方式(这里返回rgb数组模式)
 gradientColor.prototype.colorRgb = function(sColor){
  var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  var sColor = sColor.toLowerCase();
  if(sColor && reg.test(sColor)){
   if(sColor.length === 4){
    var sColorNew = "#";
    for(var i=1; i<4; i+=1){
     sColorNew += sColor.slice(i,i+1).concat(sColor.slice(i,i+1));
    }
    sColor = sColorNew;
   }
   //处理六位的颜色值
   var sColorChange = [];
   for(var i=1; i<7; i+=2){
    sColorChange.push(parseInt("0x"+sColor.slice(i,i+2)));
   }
   return sColorChange;
  }else{
   return sColor;
  }
 };
 // 将rgb表示方式转换为hex表示方式
 gradientColor.prototype.colorHex = function(rgb){
  var _this = rgb;
  var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  if(/^(rgb|RGB)/.test(_this)){
   var aColor = _this.replace(/(?:(|)|rgb|RGB)*/g,"").split(",");
   var strHex = "#";
   for(var i=0; i<aColor.length; i++){
    var hex = Number(aColor[i]).toString(16);
    hex = hex<10 ? 0+''+hex :hex;// 保证每个rgb的值为2位
    if(hex === "0"){
     hex += hex;
    }
    strHex += hex;
   }
   if(strHex.length !== 7){
    strHex = _this;
   }
   return strHex;
  }else if(reg.test(_this)){
   var aNum = _this.replace(/#/,"").split("");
   if(aNum.length === 6){
    return _this;
   }else if(aNum.length === 3){
    var numHex = "#";
    for(var i=0; i<aNum.length; i+=1){
     numHex += (aNum[i]+aNum[i]);
    }
    return numHex;
   }
  }else{
   return _this;
  }
 }
 var gradient = new gradientColor('#013548','#554851',10);
 console.log(gradient);//控制台输出
 alert(gradient);
</script>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 盒模型 尺寸深入理解
Dec 31 Javascript
jquery ajax中使用jsonp的限制解决方法
Nov 22 Javascript
js简单实现删除记录时的提示效果
Dec 05 Javascript
jQuery实现的导航条切换可显示隐藏
Oct 22 Javascript
JavaScript File API文件上传预览
Feb 02 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
Jan 10 Javascript
JavaScript异步上传图片文件的实例代码
Jul 04 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
Jul 05 Javascript
jQuery实现QQ空间汉字转拼音功能示例
Jul 10 jQuery
微信小程序之页面拦截器的示例代码
Sep 07 Javascript
vue实现购物车案例
May 30 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
Aug 31 Javascript
详解Vue 实例中的生命周期钩子
Mar 21 #Javascript
十大热门的JavaScript框架和库
Mar 21 #Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
Mar 21 #Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 #Javascript
Omi v1.0.2发布正式支持传递javascript表达式
Mar 21 #Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
Mar 21 #jQuery
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
Mar 21 #jQuery
You might like
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
基于JS实现翻书效果的页面切换样式
2017/02/16 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
Python的Django框架中settings文件的部署建议
2015/05/30 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
django反向解析和正向解析的方式
2018/06/05 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
2020/12/24 Python
python3 kubernetes api的使用示例
2021/01/12 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
英文翻译的自我评价语句
2013/10/04 职场文书
党校学习自我鉴定
2014/02/24 职场文书
小学毕业感言500字
2014/02/28 职场文书
爱国演讲稿400字
2014/05/07 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
企业贷款委托书格式
2014/09/12 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
公司安全管理制度范本
2015/08/05 职场文书