如何生成只在javascript中变暗的随机颜色?

我一直在阅读有关如何在JS / JQuery中生成随机颜色的问题。 但我想生成只有黑色,黄色和灰色范围颜色的变暗颜色,以便能够在谷歌地图中绘制不同颜色的区域。

谢谢

var hue = Math.floor(Math.random() * 360), saturation = Math.floor(Math.random() * 100), lightness = Math.floor(Math.random() * 50), color = "hsl(" + hue + ", " + saturation + "%, " + lightness + "%)"; 

那就是生成一个随机的hsl颜色。 但是如果你想让现有的rgb颜色变暗,最好的办法是将它转换为hsl,然后根据你的需要设置它的亮度值。 享受这些function:

 function rgbToHsl(r, g, b) { var maxRGB = Math.max(r, g, b), minRGB = Math.min(r, g, b), tmp, h, s, l; tmp = maxRGB - minRGB; l = (maxRGB + minRGB)/255; if (tmp) { s = Math.round(tmp/(l < 1 ? l : 2 - l))/255; if (r === maxRGB) h = (g - b)/tmp; else if (g === maxRGB) h = 2 + (b - r)/tmp; else h = 4 + (r - g)/tmp; h = (h < 0 ? h + 6 : h)*60 % 360; } else h = s = 0; l /= 2; return [h, s, l]; } function hslToRgb(h, s, l) { if (!s) return r = g = b = l*255; var q = l < .5 ? l*(1 + s) : l + s - l*s, p = 2*l - q; for (var i = 120, t, c = []; i >= -120; i -= 120) { t = h + i; if (t < 0) t += 360; else if (t >= 360) t -= 360; if (t < 60) c.push(p + (q - p)*t/60); else if (t < 180) c.push(q); else if (t < 240) c.push(p + (q - p)*(240 - t)/60); else c.push(p); } return [c[0]*255, c[1]*255, c[2]*255]; } 

这里, sl范围从01rgb范围是0255h0359

首先定义您想要的RGB范围,一旦您有这些定义,只需在这些范围内生成随机值。 或者定义你不想要的范围并保持循环,直到找到符合这些标准的颜色,效率低得多,但如果效率不是问题则编程要容易得多。

问题出在哪里? 只需生成3个随机数,可能在30到150之间,因此您只能获得相对较低的R,G和B值,并阻止“黑色”颜色。 然后,您只需检查这三个值是否属于您定义的黑名单颜色范围(如黄色或灰色)的范围。

根据jj__评论的重复?

 function getGMapRandomColor() { return 'hsla(' + Math.floor(Math.random()*360) + ', 100%, 70%, 1)'; } 

为了简化实现和彻底性,我不能高度推荐这个脚本:

David Merfeld的randomColor

选择hex或rgb,添加一些alpha,指定浅色或深色调色板,避免重复等。