Skip to content
扫码开始移动端阅读
如何实现随机颜色
共
948
字 需要≈
4.74
分钟 奇淫技巧
杂谈
准备开始
首先生成随机颜色之前。我们先要有一些基础知识,如果你有基本的概念。可以跳过。如果你不太熟悉,可以先看一下这篇文章《关于RGB》。
其次,我们要对计算机的随机有一个概念,如果你没有概念,可以看一下这篇文章《关于前端中的随机》
初阶
假如你刚开始学习js
- 生成随机的RGB颜色值,其中r、g、b分别表示红、绿、蓝三个颜色通道。
- 使用Math.random()函数生成0到1之间的随机数,并乘以256,得到0到255之间的随机数,分别赋值给r、g、b。
- 将RGB值转换为十六进制形式的颜色值。
- 使用toString(16)将r、g、b转换为十六进制字符串。
- 使用padStart(2, '0')将十六进制字符串补齐为两位,如果不足两位则在前面补0。
- 将三个十六进制字符串拼接在一起,前面加上"#",得到最终的随机颜色值。
- 返回随机颜色值。
javascript
const getRandomColor = () => {
// 生成随机的RGB颜色值
const r = Math.floor(Math.random() * 256);
const g = Math.floor(Math.random() * 256);
const b = Math.floor(Math.random() * 256);
// 将RGB值转换为十六进制
return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;
};
中阶
假如你已经有一定的js基础
- 在函数内部,使用
Math.random()
生成一个0到1之间的随机数。 - 将随机数乘以16777216,得到一个0到16777216之间的随机整数。
- 使用
toString(16)
将随机整数转换为十六进制字符串。 - 如果转换后的字符串长度不足6位,使用
padStart(6, '0')
在字符串前面添加0,使其长度达到6位。 - 将转换后的十六进制字符串添加
#
作为前缀。 - 返回生成的随机颜色值。
javascript
const getRandomColor = () => {
const random = Math.floor(Math.random() * 16777216).toString(16);
return `#${random.padStart(6, '0')}`;
};
高阶
简化的写法
因为所有颜色一共有16777216种,所以我们可以直接生成一个0到16777216之间的随机整数,然后使用toString(16)
将其转换为十六进制字符串,最后使用padStart(6, '0')
在字符串前面添加0,使其长度达到6位,最后添加#
作为前缀,得到最终的随机颜色值。
javascript
const getRandomColor = `#${Math.floor(Math.random() * 16777216).toString(16).padStart(6, '0')}`
玩一下
问题
我相信你在玩的时候发现一个问题,那么就是颜色是随机的。没有问题,但是我们需要判断一下他是更亮一点,还是更暗一点,用来设置文字的颜色,更容易被看到。
解决
简化的写法
我们可以判断一下颜色的亮度,如果亮度大于186,那么我们就设置为黑色,否则就设置为白色。
js
const getTextColor = (color) => {
// 先将颜色转换为rgb
const rgb = color.match(/\d+/g);
// 计算亮度
const light = rgb[0] * 0.299 + rgb[1] * 0.587 + rgb[2] * 0.114;
// 如果亮度大于186,那么我们就设置为黑色,否则就设置为白色。
return light > 186 ? '#000000' : '#ffffff';
};
再玩一下
完活
相信你通过这篇文章学习到的知识以后一定可以改变世界~
转载请注明来源:LeeDaisen : 《如何实现随机颜色》