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 全等号运算符使用说明
May 31 Javascript
将list转换为json失败的原因
Dec 17 Javascript
Javascript基础教程之switch语句
Jan 18 Javascript
JavaScript实现把数字转换成中文
Jun 29 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
Mar 02 Javascript
老生常谈javascript的类型转换
Oct 12 Javascript
vue component组件使用方法详解
Jul 14 Javascript
JavaScript实现三级级联特效
Nov 05 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
Nov 15 Javascript
vue使用中的内存泄漏【推荐】
Jul 10 Javascript
egg.js的基本使用和调用数据库的方法示例
May 18 Javascript
Element Carousel 走马灯的具体实现
Jul 26 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
php 设计模式之 单例模式
2008/12/19 PHP
如何让CI框架支持service层
2014/10/29 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
Javascript中this绑定的3种方法与比较
2016/10/13 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
js实现全选反选不选功能代码详解
2019/04/24 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
python 连接sqlite及简单操作
2017/06/30 Python
Python常见的pandas用法demo示例
2019/03/16 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
Html5跳转到APP指定页面的实现
2020/01/14 HTML / CSS
大一新生军训时的自我评价分享
2013/12/05 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
英语感恩演讲稿
2014/01/14 职场文书
小学教学随笔感言
2014/02/26 职场文书
初中家长寄语
2014/04/02 职场文书
公司委托书格式范文
2014/04/04 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
西安事变观后感
2015/06/12 职场文书
解约证明模板
2015/06/19 职场文书
课改心得体会范文
2016/01/25 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书