rgb和十六进制颜色代码相互转换

css中常用的两种颜色表示方式分别是rgb和十六进制两种,有时候可能特殊需要,要将获取到的rgb颜色转换为十六进制,反之也有这种情况。网上这种颜色转换工具比较少,于是本人就开发了这么一个小工具,方便使用,并将代码分享给大家。

先上效果图:

工具地址:http://oohy4f8bb.bkt.clouddn.com/colorExchange.html


代码实现

  • 原生js获取DOM对象、绑定事件

  • js正则表达式校验用户输入

  • parseInt(,16)16进制转10进制

  • num.toString(16)10进制转16进制


完整代码如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>rgb与十六进制颜色转换</title>

<style>

*{

font-family: "微软雅黑";

box-sizing:border-box;

}

html,body,.page{

height:100%;

margin:0px;

}

.page{

background:url(http://ol435r2l8.bkt.clouddn.com/background.jpg) no-repeat center /100%;

}

.main{

width: 751px;

height: 100%;

margin: 0 auto;

background: rgba(255, 255, 255, 0.81);

}

.header{

text-align: center;

height: 46px;

line-height: 46px;

font-size: 26px;

background-color: #5cdc85;

color: #fff;

border-radius: 0px;

box-shadow: 0px 8px 5px #b5b5b5;

}

.content{

margin: 50px 10px;

}

input{

height:35px;

width:200px;

outline:0;

border:1px solid #EEEEEE;

padding:5px;

}

input.rgb{

width:50px;

}

.btn{

width: 60px;

height: 30px;

line-height: 30px;

text-align: center;

display: inline-block;

background: #55aae2;

color: #fff;

border-radius: 3px;

cursor:pointer;

}

#rgbOutput,#hexOutput{

color: rgb(191, 9, 244);

font-size: 16px;

font-weight: 600;

}

#rgbColor,#hexColor{

display: inline-block;

width: 30px;

height: 30px;

position: absolute;

margin-left: 60px;

}

</style>

</head>

<body>

<div class="page">

<div class="main">

<header>

<div class="header">颜色代码转换</div>

</header>

<div class="content">

<p>

<span>十六进制颜色:</span>

<input id="i-hexcode" type="text" placeholder="填写16进制颜色 如:#FFFFFF">

<span class="btn" id="16torgb">转换</span>

</p>

<p id="o-rgbcode">

<span id="rgbOutput"></span>

<span id="rgbColor"></span>

</p>

<p style="margin-top: 30px;">

<span>RGB颜色:</span>

<input id="i-rgbcodeR" type="text" class="rgb">

<input id="i-rgbcodeG" type="text" class="rgb">

<input id="i-rgbcodeB" type="text" class="rgb">

<span class="btn" id="rgbto16">转换</span>

</p>

<p id="o-hexcode">

<span id="hexOutput"></span>

<span id="hexColor"></span>

</p>

</div>

</div>

</div>

<script>

//颜色值输入区域

var i_hexcode = document.getElementById("i-hexcode");

var i_rgbcodeR = document.getElementById("i-rgbcodeR");

var i_rgbcodeG = document.getElementById("i-rgbcodeG");

var i_rgbcodeB = document.getElementById("i-rgbcodeB");

//颜色值输出区域

var rgbOutput = document.getElementById("rgbOutput");

var rgbColor = document.getElementById("rgbColor");

var hexOutput = document.getElementById("hexOutput");

var hexColor = document.getElementById("hexColor");

//16进制转rgb转换按钮

var _16torgb = document.getElementById("16torgb");

//rgb转16进制转换按钮

var rgbto16 = document.getElementById("rgbto16");

//校验16进制颜色值正则表达式

var reg = /^#([0-9a-fA-F]{6}[0-9a-fA-F]{3})$/;

//校验rgb颜色值只能输入整数且最多三位数字

var regRgb = /^[0-9]{1,3}$/;

//为按钮注册点击事件

_16torgb.addEventListener("click",sixteenToRgb);

rgbto16.addEventListener("click",rgbToSixteen);

/**

* 16toRgb颜色转换

*/

function sixteenToRgb(){

var hexValue = i_hexcode.value;

//首先校验用户填写的代码是否正确

if(!reg.test(hexValue)){

alert("颜色值输入有误请检查!");

}else{

var codeValue = hexValue.replace("#",'');

var rgbStr = "";

if(codeValue.length==6){

var decR = parseInt(codeValue.slice(0,2),16);

var decG = parseInt(codeValue.slice(2,4),16);

var decB = parseInt(codeValue.slice(4,6),16);

rgbStr = decR+','+decG+','+decB;

}else{

var decR = codeValue.slice(0,1);

var decG = codeValue.slice(1,2);

var decB = codeValue.slice(2,3);

decR = parseInt(decR+decR,16);

decG = parseInt(decG+decG,16);

decB = parseInt(decB+decB,16);

rgbStr = decR+','+decG+','+decB;

}

rgbOutput.innerText = rgbStr;

rgbColor.style.background = "rgb("+rgbStr+")";

}

}

/**

* rgbto16颜色转换

*/

function rgbToSixteen(){

var rgbValueR = i_rgbcodeR.value;

var rgbValueG = i_rgbcodeG.value;

var rgbValueB = i_rgbcodeB.value;

//首先校验用户填写的代码是否正确

if((!regRgb.test(rgbValueR)rgbValueR>255)(!regRgb.test(rgbValueG)rgbValueG>255)(!regRgb.test(rgbValueB)rgbValueB>255)){

alert("颜色值输入有误请检查!");

}else{

var rgbValueR = parseInt(rgbValueR);

var rgbValueG = parseInt(rgbValueG);

var rgbValueB = parseInt(rgbValueB);

var rToHex = rgbValueR.toString(16);

var gToHex = rgbValueG.toString(16);

var bToHex = rgbValueB.toString(16);

if(rToHex.length==1){

rToHex = "0"+rToHex;

}

if(gToHex.length==1){

gToHex = "0"+gToHex;

}

if(bToHex.length==1){

bToHex = "0"+bToHex;

}

hexOutput.innerText = "#"+rToHex+gToHex+bToHex;

hexColor.style.background = "#"+rToHex+gToHex+bToHex;

}

}

</script>

</body>

</html>

免责声明:本文作者:“Inn程序媛”,版权归作者所有,观点仅代表作者本人。本站仅提供信息存储分享服务,不拥有所有权。信息贵在分享,如有侵权请联系ynstorm@foxmail.com,我们将在24小时内对侵权内容进行删除。
(93)
xp鼠标指针主题包(电脑鼠标键盘总是出现
上一篇 2024年01月11日
iphone6参数(苹果iphone7参
下一篇 2024年01月11日

相关推荐

  • 无线网络连接受限制(显示网络受限制或无连接)

    对于这个问题我的设置一般都是不关闭DHCP的,这个要看你的第二个路由器的主网线是放在那一根口,建议放在WAN口,这样你的第二个路由器就是路由器,也可以使用WIFI,也可以当交换机了,如果不插在WAN口就会出现你说的这种情况。...

    2023年11月02日
  • 电视机价格(乐声牌56寸电视机多少钱)

    乐声牌56寸电视机价格为6800元。1.经市场调研,乐声牌56寸电视机在同类产品中,价格接近中等水平,因此价格不会过高。2.对于普通消费者而言,6800元的价格也并不过于昂贵,且能够获得良好的视听享受,因此价格公道合理。3.需要注意的是,在不...

    2023年11月05日
  • 索尼s39h怎么样(索尼手机s39h怎么下载微信)

    索尼的手机下载软件的方法模式几乎是一样的。在软件的下载中心直接搜索一下微信,然后点击就可以下载了,前提是你的手机要有网络...

    2023年11月11日
  • office excel 2003(Excel2003怎么做表格)

    Excel2003绘制表格如下:电脑要装有excel2003软件,打开excel2003软件。选中要做的表格大小。然后先从软件右上角有一个图标可以加粗表格线路。下面就是选中做出来的表格了。...

    2023年11月19日
  • 联通版iphone4s(苹果4S移动版和联通版有什么不同)

    苹果4s没有移动版,只有联通版和电信版。电信版iphone4s和联通版iphone4s的区别:...

    2023年12月03日
  • 2024年上半年,内地居民赴港澳定居审批分数线公布

    国家移民管理局2024年上半年,内地居民赴港澳地区定居夫妻团聚类申请审批分数线为109.6分,申请人与香港或者澳门配偶分居时间早于2021年6月30日的,累计积分达到审批条件;子女照顾父母类申请审批分数线为60分,申请人年龄为18至59周岁,...

    2023年12月27日
  • 2020-12-12 电脑配件价格文字版

    CPUIntel价格G5905散/原盒209/299G6400散/原盒399/450I310100散/原盒680/840I310100F散/原盒550/630I510400F散/原盒938/999I510400散/原盒1050/1250I51...

    2024年01月28日
  • 5.25(5.25是什么星座)

    时间匆匆,5.20的余音还没消停。5.25的仪式感又来了!今年我已经50岁,到了孔子所说的知天命的年纪,不过,目前而言,我对自己的天命依然处于惑的阶段,所以,索性不去考虑!金惟纯先生在他的《人生只有一件事》一书中提到:这世上只有三件事自己的事...

    2024年02月06日
  • 奔腾剃须刀好吗(奔腾剃须刀怎么样呢)

    剃须刀充电发烫,但是不存电,一般有两个原因,一个原因是电池老化电池也不存电了,所以会发烫,另外一个原因是剃须刀内部的电气元件老化导致电路流通不畅。...

    2024年04月09日
  • 乐凯相纸(证件照乐凯金圣莱光面)

    "【富士】相纸洗出来颜色较鲜艳一些,金冠适合人物照,晶彩相纸色彩鲜艳,适合冲印风景照、旅游照哦【乐凯】较厚,色彩柔和,性价比与富士相媲美哦【柯达金尊】是效果和销量不错的一款相纸,画质细腻。纸基好,是用原浆细纤维生产,适用于人物照哦【柯达皇家】...

    2024年05月19日
返回顶部