Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中只生成变暗的随机颜色?_Javascript_Jquery_Colors_Rgb_Hsl - Fatal编程技术网

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

如何在javascript中只生成变暗的随机颜色?,javascript,jquery,colors,rgb,hsl,Javascript,Jquery,Colors,Rgb,Hsl,我一直在阅读关于如何在JS/JQuery中生成随机颜色的问题。但我只想生成较暗的颜色,避免黑色、黄色和灰色范围的颜色,以便能够在谷歌地图中绘制不同颜色的区域 谢谢 这是为了生成一个随机的hsl颜色。但是如果你想使现有的rgb颜色变暗,最好的办法是将其转换为hsl,然后根据需要设置其亮度值。享受以下功能的乐趣: function rgbToHsl(r, g, b) { var maxRGB = Math.max(r, g, b), minRGB = Math.min(r,

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

谢谢

这是为了生成一个随机的hsl颜色。但是如果你想使现有的rgb颜色变暗,最好的办法是将其转换为hsl,然后根据需要设置其亮度值。享受以下功能的乐趣:

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];
}
函数rgbToHsl(r,g,b){
var maxRGB=数学最大值(r,g,b),
minRGB=Math.min(r,g,b),
tmp,h,s,l;
tmp=最大RGB-最小RGB;
l=(maxRGB+minRGB)/255;
如果(tmp){
s=数学四舍五入(tmp/(l<1?l:2-l))/255;
如果(r==maxRGB)h=(g-b)/tmp;
如果(g==maxRGB)h=2+(b-r)/tmp;
否则h=4+(r-g)/tmp;
h=(h<0?h+6:h)*60%360;
}否则h=s=0;
l/=2;
返回[h,s,l];
}
函数hslToRgb(h、s、l){
如果(!s)返回r=g=b=l*255;
var q=l<0.5?l*(1+s):l+s-l*s,
p=2*l-q;
对于(变量i=120,t,c=[];i>=-120;i-=120){
t=h+i;
如果(t<0)t+=360;
如果(t>=360)t-=360;
如果(t<60)c.push(p+(q-p)*t/60);
否则,如果(t<180)c.推(q);
否则,如果(t<240)c.push(p+(q-p)*(240-t)/60);
否则c.push(p);
}
返回[c[0]*255,c[1]*255,c[2]*255];
}

这里,
s
l
的范围从
0
1
r
g
b
0
255
h
0
359
,首先定义您想要的RGB范围,一旦有了这些定义,就可以在这些范围内生成随机值。或者定义您不想要的范围,并不断循环,直到找到符合这些标准的颜色,效率要低得多,但如果效率不成问题,编程就容易得多。

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

根据jj_uuuo的评论

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

为了实现的简单性和彻底性,我不能高度推荐此脚本:


在十六进制或rgb之间选择,添加一些alpha,指定浅色或深色调色板,避免重复,等等。

那么您想生成随机的深色吗?还是变暗用户选择的颜色?还是什么?你必须去掉上半部分的亮色。你可以用50%的灰色或黑色遮罩颜色#7F7F7F@Juanito你是从颜色开始的?以什么形式?RGB、HSL或其他什么?@MaxArt以十六进制。谢谢你完成这段代码了吗?我也有同样的问题。我需要生成随机颜色,但我想跳过这些颜色,它们类似于谷歌地图上的绿色、白色或黄色,而且很难看。
function getGMapRandomColor() {
    return 'hsla(' + Math.floor(Math.random()*360) + ', 100%, 70%, 1)';
}