JavaScript 练手小技巧:#RRGGBB 和 rgb(255,255,255)颜色代码相互转换

看到有人在 CSDN 上写颜色的转换代码,突发奇想,用 JavaScript 也写一个。

一、相关知识点

(1)常用颜色代码方式,有两种 #RRGGBB 和 rgb(255,255,255)

  1. #RRGGBB 规定十六进制颜色,其中 RR(红色)、GG(绿色)和 BB(蓝色)十六进制整数指定颜色的成分(分量)。所有值必须在 00 到 FF 之间。
  2. rgb(255,255,255),三个 0-255 的颜色值,分别是对应 #RRGGBB 的 RR(红色)、GG(绿色)和 BB(蓝色)。

此外,用  #RRGGBB 表示颜色,可以简写为 #RGB

(2)JavaScript 对整数提供四种进制的表示方法:十进制、十六进制、八进制、二进制。

0xff // 255,十六进制
0o377 // 255,八进制
0b11 // 3,二进制

(3)在 JavaScript 无论哪种方式表示颜色,都是字符串数据

二、颜色转换实现

let c1 = "#ff3";
let c2 = "rgba(4,0,0)";
function toRGB(color){
    // 截取 #RRGGBB 除了 # 号以外的子串。
    let str = color.substr(1);
    switch (str.length) {
        case 3 : str = str[0]+str[0]+str[1]+str[1]+str[2]+str[2];
                 break;
        case 6 : str = str ;
                 break;
        default :
            console.info("数据错误");
            return false;
    }
    // 十六进制数据前面必须有 0x
    let R = Number("0x"+str.substr(0,2));
    let G = Number("0x"+str.substr(2,2));
    let B = Number("0x"+str.substr(4,2));
    return `rgb(${R},${G},${B})`;
}

function toRRGGBB(color){
    // 利用正则获取 rgb(255,255,255) 里的所有数字。
    let nums = color.match(/\d+/g);  // 数字字符串数组
    let RR = Number(nums[0]).toString(16);  // 转为数字后,再转为十六进制的字符串
    RR = RR.length<2 ? "0"+RR:RR;
    let GG = Number(nums[1]).toString(16);
    GG = GG.length<2 ? "0"+GG:GG;
    let BB = Number(nums[2]).toString(16);
    BB = BB.length<2 ? "0"+BB:BB;
    return "#"+RR+GG+BB ;
}

console.info( toRGB(c1) );
console.info( toRRGGBB(c2) );

用到的主要知识点:

1.字符串的方法 substr 用来截取子串。

// 截取 #RRGGBB 除了 # 号以外的子串。
    let str = color.substr(1);

2.把 十六进制的数据转为 十进制数据。

let R = Number("0x"+str.substr(0,2));

3.利用正则表达式,抓取字符串中的所有数字,得到包含数字字符串的数组。

 // 利用正则获取 rgb(255,255,255) 里的所有数字。
let nums = color.match(/\d+/g);  // 数字字符串数组

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值