将16进制的颜色转为rgb颜色
在前端面试过程中,常常会遇到这样一种类型的题目:
使用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颜色值,看起来比前面的方法顺眼多了!
将16进制的颜色转为rgb颜色的更多相关文章
- Java 将数字转为16进制,然后转为字符串类型
public class ArrayTest3 { public static void main(String[] args){ System.out.println(toHex(60)); } / ...
- 16进制色值转换成RGB
#51147f 转换成RGB ,5*16+1 ,1*16+4,7*16+15 #A9A9A9 转换成RGB ,A*16+9 ,A*16+9,A*16+9
- Java 将数字转为16进制,然后转为字符串类型 将空格去掉。终结版
//十进制转为十六进制 public class ArrayTest7 { public static void main(String[] args){ System.out.println(toH ...
- JS实现rgb与16进制颜色相互转换
1.rgb转16进制 function to16 (a) {//RGB(204,204,024) //十六进制颜色值的正则表达式 var reg = /^#([0-9a-fA-f]{3}|[0-9a- ...
- iOS开发-从16进制颜色中获取UIColor
目前iOS中设置UIColor只能使用其枚举值.RGB等方法,不能直接将常用的16进制颜色值直接转为UIColor对象,所以写了点代码,将16进制颜色值转为UIColor. 代码如下, //头文件#i ...
- 颜色转换、随机、16进制转换、HSV
颜色转换.随机.16进制转换.HSV: /** * * *-----------------------------------------* * | *** 颜色转换.随机.16进制转换.HSV * ...
- 颜色rgba、16进制、10进制互相装换
rgba转16进制: function RGBToHex(rgb){ var regexp = /[0-9]{0,3}/g; var re = rgb.match(regexp);//利用正则表达式去 ...
- Java字符串转16 进制工具类Hex.java
Java字符串转16 进制工具类Hex.java 学习了:https://blog.csdn.net/jia635/article/details/56678086 package com.strin ...
- Java Hex 16进制的 byte String 转换类
package mobi.dzs.android.util; import java.util.Locale; /** * 16进制值与String/Byte之间的转换 * @author Jerry ...
随机推荐
- jstack实战死循环与死锁学习笔记
一.实战死循环导致CPU飙高 top -p pid -H jstack pid printf "%s" 十进制的线程id 二.创建CUP100%实例(死循环) 1.创建CpuCo ...
- SpringBoot入门学习笔记
SpringBoot是SpringMVC的升级版,SpringBoot的特点: application.properties文件配置: server.port = 8080端口配置 server.co ...
- Hystrix 使用入门
在很多系统架构中都需要考虑横向扩.单点故障等问题,对于一个庞大的应用集群,部分服务或者机器出现问题不可避免,在出现故障时,如何减少故障的影响.保障集群的高可用,成为一个重要的工作,Hystrix 是一 ...
- 源码查看工具ctags+vim
一.ctags源码工具的安装 1.sudo apt-get install ctags 2.源码目录如下: 3.对配置文件进行配置 4.在末尾添加如下: 二.使用 1. 进入源码目录,输入ctags ...
- WPF Demo13通知项属性+数据绑定(代码层)
<Window x:Class="BindingDemo1.MainWindow" xmlns="http://schemas.microsoft.com/winf ...
- MySQL 单条记录长度最大65535
今天设计表结构,加了几个字段,结果报错了 Ligne trop grande. Le taille maximale d'une ligne, sauf les BLOBs, est 65535... ...
- workerman vmstat服务器状态监控服务
转载出自 :http://www.workerman.net/workerman-vmstat workerman vmstat服务器状态监控服务 vmstat 命令可以展现服务器的CPU使用率,内存 ...
- Null hypothesis TypeⅠerror Type Ⅱ error
Null hypothesis usually express the phenomenon of no effect or no difference. TypeⅠerror is the inco ...
- java1.8新特性(一)
一直在更新java 版本,原来也没有关注java版本的变化 引入的一些新的api 引起注意的还是 关于一些并发包的使用,那时候才对每个版本的特性 去了解了一下,虽然 不一定都用上了,但是不管学习什 ...
- Java工程师 必须掌握的知识点
Web核心:XML.HTTP及Tomcat.Servlet.request与response.cookie与session.jsp技术.jdbc高级.Ajax开发.Filter/Listener高级. ...