全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS实现随机颜色的3种方法与颜色格式的转化

前言

相信大家都知道在前端的颜色表示方式有多种,一种是以3个或6个十六进制的数子表示,一种是RGB的数字形式,还有一种是直接以颜色的英文来表示。这三种都是不支持透明色的。所以还有RGBA的表式方式,在RGB的的基础上加入了Alpha透明,使网页可以展现更加复杂绚丽的效果。

随机颜色

在平时的码农日常中,经常会用到求随机颜色的地方,下面是我总结的几种简单的实现随机颜色的方式:

十六进制格式(#000000-#FFFFFF)

第一种是比较简单的方法,这种方法是先随机生成ffffff以内16进制数,然后判断位数,少于6位的用while循环在前面加0,凑够6位。

function randomHexColor() { //随机生成十六进制颜色
 var hex = Math.floor(Math.random() * 16777216).toString(16); //生成ffffff以内16进制数
 while (hex.length < 6) { //while循环判断hex位数,少于6位前面加0凑够6位
  hex = '0' + hex;
 }
 return '#' + hex; //返回‘#'开头16进制颜色
}

还有一种比较方便但是比较难懂的方法,需要用到位运算。

function randomHexColor() { //随机生成十六进制颜色
 return '#' + ('00000' + (Math.random() * 0x1000000 << 0).toString(16)).substr(-6);
}

按执行顺序可以分为以下六步:

  1. 先执行Math.random() * 0x1000000,其中0x1000000=0xffffff+1,因为Math.random()取不到1,所以+1,这样就会生成一个1-16777216(不包含)以内的浮点数。
  2. 然后执行<<0,这是取整运算,去掉后面的小数点。这时为一个16777216(不包含)以内的十进制数。
  3. 之后执行.toString(16) ,把十进制数转化为六位以下16进制数。
  4. 再后执行'00000'+,这时因为之前生成的16进制数最少可能仅一位,在前面加上5个0。
  5. 最后执行.substr(-6) ,是去从-6开始的后面所有字符串,也就是最后6位数。
  6. 前面加上#并retuen。

RGB格式

function randomRgbColor() { //随机生成RGB颜色
 var r = Math.floor(Math.random() * 256); //随机生成256以内r值
 var g = Math.floor(Math.random() * 256); //随机生成256以内g值
 var b = Math.floor(Math.random() * 256); //随机生成256以内b值
 return `rgb(${r},${g},${b})`; //返回rgb(r,g,b)格式颜色
}

RGBA格式

function randomRgbaColor() { //随机生成RGBA颜色
 var r = Math.floor(Math.random() * 256); //随机生成256以内r值
 var g = Math.floor(Math.random() * 256); //随机生成256以内g值
 var b = Math.floor(Math.random() * 256); //随机生成256以内b值
 var alpha = Math.random(); //随机生成1以内a值
 return `rgb(${r},${g},${b},${alpha})`; //返回rgba(r,g,b,a)格式颜色
}

颜色格式转化

在编码过程中,经常会遇到要将颜色格式相互转化的问题,其中十六进制格式和RGB格式是可以相互转化的,但是RGBA格式由于多了前两者没有的Alpha透明属性,所以和前两者转化会丢失Alpha值,不建议进行转化,下面是我的颜色转化的方法:

十六进制转为RGB

function hex2Rgb(hex) { //十六进制转为RGB
 var rgb = []; // 定义rgb数组
 if (/^\#[0-9A-F]{3}$/i.test(hex)) { //判断传入是否为#三位十六进制数
  let sixHex = '#';
  hex.replace(/[0-9A-F]/ig, function(kw) {
   sixHex += kw + kw; //把三位16进制数转化为六位
  });
  hex = sixHex; //保存回hex
 }
 if (/^#[0-9A-F]{6}$/i.test(hex)) { //判断传入是否为#六位十六进制数
  hex.replace(/[0-9A-F]{2}/ig, function(kw) {
   rgb.push(eval('0x' + kw)); //十六进制转化为十进制并存如数组
  });
  return `rgb(${rgb.join(',')})`; //输出RGB格式颜色
 } else {
  console.log(`Input ${hex} is wrong!`);
  return 'rgb(0,0,0)';
 }
}

RGB转为十六进制

function rgb2Hex(rgb) {
 if (/^rgb\((\d{1,3}\,){2}\d{1,3}\)$/i.test(rgb)) { //test RGB
  var hex = '#'; //定义十六进制颜色变量
  rgb.replace(/\d{1,3}/g, function(kw) { //提取rgb数字
   kw = parseInt(kw).toString(16); //转为十六进制
   kw = kw.length < 2 ? 0 + kw : kw; //判断位数,保证两位
   hex += kw; //拼接
  });
  return hex; //返回十六进制
 } else {
  console.log(`Input ${rgb} is wrong!`);
  return '#000'; //输入格式错误,返回#000
 }
}

总结

以上就是这篇文文章的全部内容了,也是我在平时遇到的关于颜色处理方面的问题,大家有遇到什么奇怪的问题和更好的解决方法可以交流沟通一下。希望本文的内容对大家的学习或者工作能带来一定的帮助。


# js随机颜色  # js随机颜色代码  # js颜色格式转换  # JS实现鼠标滑过链接改变网页背景颜色的方法  # 鼠标选择动态改变网页背景颜色的JS代码  # JS实现文字链接感应鼠标淡入淡出改变颜色的方法  # JavaScript实现的鼠标响应颜色渐变效果完整实例  # js随机颜色代码的多种实现方式  # js获取随机颜色值的函数  # javascript生成随机颜色示例代码  # JavaScript随机生成颜色的方法  # js实现点击按钮后给Div图层设置随机背景颜色的方法  # JavaScript实现鼠标移入随机变换颜色  # 转化为  # 六位  # 经常会  # 不包含  # 都是  # 这是  # 就会  # 我在  # 大家都  # 基础上  # 十进制数  # 两位  # 英文  # 几种  # 不支持  # 要将  # 这篇  # 在前面  # 解决方法  # 第一种 


相关文章: 建站之星伪静态规则如何正确配置?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  开心动漫网站制作软件下载,十分开心动画为何停播?  香港服务器租用每月最低只需15元?  ,制作一个手机app网站要多少钱?  音响网站制作视频教程,隆霸音响官方网站?  如何选择建站程序?包含哪些必备功能与类型?  如何使用Golang安装API文档生成工具_快速生成接口文档  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何在建站之星绑定自定义域名?  视频网站制作教程,怎么样制作优酷网的小视频?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  定制建站策划方案_专业建站与网站建设方案一站式指南  如何在云主机上快速搭建网站?  制作企业网站建设方案,怎样建设一个公司网站?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  音乐网站服务器如何优化API响应速度?  临沂网站制作公司有哪些,临沂第四中学官网?  如何通过FTP服务器快速搭建网站?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  如何通过VPS搭建网站快速盈利?  如何在Golang中指定模块版本_使用go.mod控制版本号  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  电商网站制作价格怎么算,网上拍卖流程以及规则?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  微信小程序 五星评分(包括半颗星评分)实例代码  C++中引用和指针有什么区别?(代码说明)  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  如何快速使用云服务器搭建个人网站?  如何高效利用200m空间完成建站?  如何彻底删除建站之星生成的Banner?  如何用y主机助手快速搭建网站?  常州自助建站费用包含哪些项目?  ppt制作免费网站有哪些,ppt模板免费下载网站?  简单实现Android文件上传  一键网站制作软件,义乌购一件代发流程?  临沂网站制作企业,临沂第三中学官方网站?  如何注册花生壳免费域名并搭建个人网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何用虚拟主机快速搭建网站?详细步骤解析  宝塔建站教程:一键部署配置流程与SEO优化实战指南  建站之星如何优化SEO以实现高效排名?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  股票网站制作软件,网上股票怎么开户? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。