如何在JavaScript中生成一个较浅颜色的随机十六进制代码?

4

我在背景中使用随机颜色,但由于文本是黑色的,当生成非常深的颜色时,文本看不见。那么在生成十六进制代码时如何排除这些深色呢?

我只能想到以下方法:

Math.floor(Math.random()*16777215).toString(16)

但是这个方法不能排除深色。请问有谁能帮忙解决这个问题吗?

先感谢您的帮助!


使用alpha可能是一种方法。 - closure
1
以下链接可能会对您有所帮助 - https://dev59.com/BVfUa4cB1Zd3GeqPK8Fk - painotpi
这个也可以,几乎是你想要的(例如去掉0到8)https://dev59.com/tXM_5IYBdhLWcg3wMgAF - Diego Basch
你可以使用按位或运算符来确保一些高位始终被设置。类似这样的代码:c = (Math.floor(Math.random()*0xffffff)|0x0f0f0f).toString(16); - david
3个回答

9

数值越高,颜色就会越浅。你可以尝试在一个较高的数字(本例中为200)上添加一个随机值:

var randValue = Math.floor(Math.random()*56)+200; //200 to 255

注意:十六进制最大值为FF,相当于十进制的255

然后,您可以选择使用.toString(16)将这些RBG值转换为十六进制,但据我所知,您可以使用RBG值设置颜色。

这里有一个jsFiddle演示


2
被接受的答案会生成深色,而这个解决方案完美地运作。谢谢你,VU。 - Deadlock

4
我会做的是为每个(RGB)生成一个00到FF的数字 (即000000FFFFFF),我也会确保G值大约比33高。

1
谢谢!我刚刚使用了这段代码:(Math.floor((Math.random()*222)+33).toString(16))+(Math.floor((Math.random()*222)+33).toString(16))+(Math.floor((Math.random()*222)+33).toString(16))现在不再生成非常暗的颜色了... 谢谢! - areke
@areke 我认为你的代码生成了从十进制33到254的值。 而十进制33是21 HEX。(这意味着您可以获得#212121,它非常暗,比SO中评论的文本颜色更暗) - ajax333221
33十六进制是51十进制。因此,如果您使用的是十进制值,请将其更改为51。 - KingKongFrog
@KingKongFrog,33十六进制太低了,即使99十六进制(或153十进制)也非常暗,只需看一下它们有多暗就知道了(http://jsfiddle.net/tWyq6/3/)。 - ajax333221

3

随机RGB颜色,不包含数字1和2,这样你就可以得到漂亮的颜色,并且代码量更少:

var randomColor = (function lol(m, s, c) {
                    return s[m.floor(m.random() * s.length)] +
                        (c && lol(m, s, c - 1));
                })(Math, '3456789ABCDEF', 4);

JSFiddle Demo


还不错,尽管我认为有些颜色仍然太暗了。我建议只使用 ABCDEF - Rob Bajorek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接