JS实现随机颜色的3种方法与颜色格式的转化
发布时间 - 2026-01-10 22:19:22 点击率:次前言

相信大家都知道在前端的颜色表示方式有多种,一种是以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);
}
按执行顺序可以分为以下六步:
- 先执行
Math.random()* 0x1000000,其中0x1000000=0xffffff+1,因为Math.random()取不到1,所以+1,这样就会生成一个1-16777216(不包含)以内的浮点数。 - 然后执行<<0,这是取整运算,去掉后面的小数点。这时为一个16777216(不包含)以内的十进制数。
- 之后执行
.toString(16),把十进制数转化为六位以下16进制数。 - 再后执行'00000'+,这时因为之前生成的16进制数最少可能仅一位,在前面加上5个0。
- 最后执行
.substr(-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实现鼠标移入随机变换颜色
# 转化为
# 六位
# 经常会
# 不包含
# 都是
# 这是
# 就会
# 我在
# 大家都
# 基础上
# 十进制数
# 两位
# 英文
# 几种
# 不支持
# 要将
# 这篇
# 在前面
# 解决方法
# 第一种
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
Laravel如何实现事件和监听器?(Event & Listener实战)
教你用AI将一段旋律扩展成一首完整的曲子
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel如何生成API文档?(Swagger/OpenAPI教程)
如何用PHP快速搭建CMS系统?
高性价比服务器租赁——企业级配置与24小时运维服务
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
详解vue.js组件化开发实践
香港服务器网站卡顿?如何解决网络延迟与负载问题?
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
如何彻底删除建站之星生成的Banner?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
WordPress 子目录安装中正确处理脚本路径的完整指南
如何批量查询域名的建站时间记录?
node.js报错:Cannot find module 'ejs'的解决办法
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何快速搭建支持数据库操作的智能建站平台?
潮流网站制作头像软件下载,适合母子的网名有哪些?
百度浏览器如何管理插件 百度浏览器插件管理方法
JavaScript中的标签模板是什么_它如何扩展字符串功能
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
EditPlus中的正则表达式 实战(1)
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
html5的keygen标签为什么废弃_替代方案说明【解答】
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Laravel如何记录自定义日志?(Log频道配置)
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
C#如何调用原生C++ COM对象详解
Laravel怎么连接多个数据库_Laravel多数据库连接配置
英语简历制作免费网站推荐,如何将简历翻译成英文?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
太平洋网站制作公司,网络用语太平洋是什么意思?
如何用搬瓦工VPS快速搭建个人网站?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
如何实现javascript表单验证_正则表达式有哪些实用技巧
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
新三国志曹操传主线渭水交兵攻略
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
如何用AI帮你把自己的生活经历写成一个有趣的故事?
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧

