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 函数链之演变
Apr 07 Javascript
各种页面定时跳转(倒计时跳转)代码总结
Oct 24 Javascript
jquery.cookie.js使用指南
Jan 05 Javascript
jQuery中map()方法用法实例
Jan 06 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
Jun 23 Javascript
JS获取一个未知DIV高度的方法
Aug 09 Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 Javascript
zTree节点文字过多的处理方法
Nov 24 Javascript
vue的状态管理模式vuex
Nov 30 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
Jun 12 Javascript
如何解决js函数防抖、节流出现的问题
Jun 17 Javascript
layui table 获取分页 limit的方法
Sep 20 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
玩转图像函数库―常见图形操作
2006/09/03 PHP
隐性调用php程序的方法
2009/03/09 PHP
ajax php 实现写入数据库
2009/09/02 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
如何打开php的gd2库
2017/02/09 PHP
跟随鼠标旋转的文字
2006/11/30 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
Python模块包中__init__.py文件功能分析
2016/06/14 Python
python matplotlib画图实例代码分享
2017/12/27 Python
python画折线图的程序
2018/07/26 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
python中rb含义理解
2020/06/18 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
css3教程之倾斜页面
2014/01/27 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
元旦活动感言
2014/03/08 职场文书
公司任命书模板
2014/06/06 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
员工辞退通知书
2015/04/17 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书