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 相关文章推荐
创建一个复制UBB软件信息的链接或按钮的js代码
Jan 06 Javascript
jQuery 创建Dom元素
May 07 Javascript
在JS数组特定索引处指定位置插入元素的技巧
Aug 24 Javascript
js 打开新页面在屏幕中间的实现方法
Nov 02 Javascript
bootstarp modal框居中显示的实现代码
Feb 18 Javascript
Vue监听数组变化源码解析
Mar 09 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
Aug 07 Javascript
javascript和php使用ajax通信传递JSON的实例
Aug 21 Javascript
vue插槽slot的理解和使用方法
Apr 03 Javascript
vue中keep-alive组件的入门使用教程
Jun 06 Javascript
vue 实现强制类型转换 数字类型转为字符串
Nov 07 Javascript
小程序简单两栏瀑布流效果的实现
Dec 18 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
php类
2006/11/27 PHP
MySQL相关说明
2007/01/15 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
jQuery 处理表单元素的代码
2010/02/15 Javascript
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
python操作MongoDB基础知识
2013/11/01 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
Python谱减法语音降噪实例
2019/12/18 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
物业经理求职自我评价
2013/09/22 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
英文演讲稿开场白
2014/08/25 职场文书
初中学生操行评语
2014/12/26 职场文书
国庆节慰问信
2015/02/15 职场文书