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

发布时间 - 2026-01-11 00:17:05    点击率:

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>

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


# js实现颜色渐变  # js颜色阶梯过渡  # js实现渐变效果  # gradient渐变  # JavaScript实现的鼠标响应颜色渐变效果完整实例  # JS实现颜色梯度与渐变效果完整实例  # jQuery与js实现颜色渐变的方法  # 漂亮! js实现颜色渐变效果  # 使用three.js 画渐变的直线  # 神奇!js+CSS+DIV实现文字颜色渐变效果  # js实现有过渡渐变效果的图片轮播相册(兼容IE  # ff)  # javascript计算渐变颜色的实例  # 转换为  # 值为  # 明度  # 几个  # 加减乘除  # 两种  # 我们可以  # 表现出  # 也都  # 可以使用  # 几步  # 六位  # 并会  # 使用了  # class  # Gradient  # pre  # brush  # lt  # js 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何基于PHP生成高效IDC网络公司建站源码?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  如何在云主机上快速搭建多站点网站?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何挑选优质建站一级代理提升网站排名?  Laravel如何处理和验证JSON类型的数据库字段  EditPlus中的正则表达式 实战(4)  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  IOS倒计时设置UIButton标题title的抖动问题  微信h5制作网站有哪些,免费微信H5页面制作工具?  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  用v-html解决Vue.js渲染中html标签不被解析的问题  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  如何用好域名打造高点击率的自主建站?  Laravel怎么在Controller之外的地方验证数据  详解Android中Activity的四大启动模式实验简述  如何在Windows环境下新建FTP站点并设置权限?  个人网站制作流程图片大全,个人网站如何注销?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  香港服务器租用费用高吗?如何避免常见误区?  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  网站建设保证美观性,需要考虑的几点问题!  如何在建站之星网店版论坛获取技术支持?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  深入理解Android中的xmlns:tools属性  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  动图在线制作网站有哪些,滑动动图图集怎么做?  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  Python进程池调度策略_任务分发说明【指导】  深圳网站制作平台,深圳市做网站好的公司有哪些?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  香港服务器选型指南:免备案配置与高效建站方案解析  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  SQL查询语句优化的实用方法总结  php485函数参数是什么意思_php485各参数详细说明【介绍】  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何登录建站主机?访问步骤全解析  java ZXing生成二维码及条码实例分享  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  如何在企业微信快速生成手机电脑官网?  活动邀请函制作网站有哪些,活动邀请函文案?  网站制作软件有哪些,制图软件有哪些?  C语言设计一个闪闪的圣诞树