博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将16进制的颜色转为rgb颜色
阅读量:4922 次
发布时间:2019-06-11

本文共 2347 字,大约阅读时间需要 7 分钟。

在前端面试过程中,常常会遇到这样一种类型的题目:

使用js将16进制的颜色值转为rgb颜色!

反而在项目中,不怎么遇到这种问题,也很少有这种需求的项目。

但毕竟面试中常常遇到,我自己在之前的面试的时候,也遇到了这个题目,那就写一下吧,当做熟悉这个过程了!

function colorToRGB(color) {    var color1, color2, color3;    color = ""+color;    if (typeof color !== "string") return;    if (color.charAt(0) == "#") {      color = color.substring(1);    }    var not16num = color.split("").filter(function (item, index) {      return isNaN(parseInt(item, 16))    });    if(not16num.length) return;     switch (color.length) {      case 3:        color1 = color.substr(0,1);        color2 = color.substr(1,1);        color3 = color.substr(2,1);        color1 = color1 + color1;        color2 = color2 + color2;        color3 = color3 + color3;      break;      case 6:        color1 = color.substr(0,2);        color2 = color.substr(2,2);        color3 = color.substr(4,2);      break;      default:      return false;    }    color1 = parseInt(color1, 16);    color2 = parseInt(color2, 16);    color3 = parseInt(color3, 16);    return "rgb("+color1+","+color2+","+color3+")";  }

  考虑到通用性, 就定义一个colorToRGB函数吧,将16进制的颜色值当做参数传入。

  首先需要将参数转为字符串类型的,'color = ""+color;'

  检查第一个字符是否为"#", 如果第一个字符为“#”,截取“#”之后的字符,判断当前color的位数,需要考虑到色值是可以简写为3位的,如果是3位颜色值,每一位重复一次代表一个颜色,例如#fff,其实是#ffffff的简写,然后分别取得rgb三个色值:color1, color2, color3。

  到这一步之后,就没什么了,剩下的就是拼接rgb色值了。

  其中:

var not16num = color.split("").filter(function (item, index) {      return isNaN(parseInt(item, 16))    });    if(not16num.length) return;

  这一步是检查,传入的参数是否是一个符合规范的16进制的数值,如果不是16进制数值,那后续的任何操作就没有任何意义了。

  我这里使用的方法是,把字符串全部截断,然后判断每一个字符是否为16进制数值,如果不是16进制的数字,则返回给变量not16num,如果最终not16num存在值,表示color不是一个16进制数字,则直接返回。

  虽然目的达成了,但是我始终感觉这个方法不是很好,需要再考虑。

 

  仔细思考一番后,自我修改:

function colorToRGB(color) {    var color1, color2, color3;    color = ""+color;    if (typeof color !== "string") return;    if (color.charAt(0) == "#") {      color = color.substring(1);    }    if (color.length == 3) {      color = color[0]+color[0]+color[1]+color[1]+color[2]+color[2];    }    if (/^[0-9a-fA-F]{6}$/.test(color)) {      color1 = parseInt(color.substr(0,2), 16);      color2 = parseInt(color.substr(2,2), 16);      color3 = parseInt(color.substr(4,2), 16);      return "rgb("+color1+","+color2+","+color3+")";    }}

  如果是3位简写的颜色值,则修改为6位颜色值。

  利用正则对颜色值进行匹配,如果是16进制的数值,则将其转为rgb颜色值,看起来比前面的方法顺眼多了! 

转载于:https://www.cnblogs.com/zhuhuoxingguang/p/7737435.html

你可能感兴趣的文章
springboot 创建一个HelloWorld应用并且运行
查看>>
SpringBoot的配置文件
查看>>
java中charAt()方法的使用
查看>>
素数——POJ-2689
查看>>
一道二分——CodeForces - 371C
查看>>
数论——HDU-1576
查看>>
ST表——HDU-3183
查看>>
欧拉函数——POJ - 2478
查看>>
数论——HDU - 2136
查看>>
Mecanim动画
查看>>
设计模式(8)--外观模式
查看>>
H5中 input消除默认,取消在手机上的点击高亮效果
查看>>
左移右移置位
查看>>
Codeforces 908 D New Year and Arbitrary Arrangement
查看>>
2019学期第七周编程总结
查看>>
Git 常用命令(转)
查看>>
[转]游戏完成平衡性的技巧
查看>>
架构实例之SpringTest
查看>>
你的跑步姿势正确吗? 教你正确跑步姿势 & 常识
查看>>
(转)Dubbo 简单Dome搭建
查看>>