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 相关文章推荐
dojo 之基础篇(三)之向服务器发送数据
Mar 24 Javascript
Node.js开发指南中的简单实例(mysql版)
Sep 17 Javascript
JavaScript省市联动实现代码
Feb 15 Javascript
js中自定义方法实现停留几秒sleep
Jul 11 Javascript
jQuery中 attr() 方法使用小结
May 03 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
Mar 01 Javascript
js实现(全选)多选按钮的方法【附实例】
Mar 30 Javascript
JavaScript数据类型学习笔记分享
Sep 01 Javascript
Vue.directive自定义指令的使用详解
Mar 10 Javascript
Koa2微信公众号开发之消息管理
May 16 Javascript
JS实现判断移动端PC端功能
Feb 21 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
Nov 11 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+dbfile开发小型留言本
2006/10/09 PHP
微信支付开发发货通知实例
2016/07/12 PHP
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
CNC数控操作工岗位职责
2013/11/19 职场文书
便利店投资的创业计划书
2014/01/12 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
迎国庆演讲稿
2014/09/05 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
电力工程合作意向书
2015/05/11 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
2016银行求职自荐信
2016/01/28 职场文书
python实现简单的三子棋游戏
2022/04/28 Python
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL