如何获得随机浅色

时间:2015-04-07 12:24:58

标签: javascript colors

我希望使用Javascript随机生成颜色十六进制代码。这种颜色必须足够轻,以便在其上放置黑色字体。

确保生成浅色的最佳方法是什么?在以下函数中限制letters是否有帮助?

function getRandomColor() {
    var letters = '0123456789ABCDEF'.split(''),
        color = '#';
    for(var i = 0; i < 6; i++ ) {
        color += letters[Math.floor(Math.random() * 16)];
    }
    return color;
}

2 个答案:

答案 0 :(得分:3)

This stack answer似乎对你有用。一个这样的答案使用:

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

JS Fiddle来自上面的答案。

编辑: 更改此行可以改变您喜欢随机颜色的亮度/暗度(更改为ABCDEF会使它们更亮):

})(Math, '3456789ABCDEF', 4);

答案 1 :(得分:1)

如果您可以忽略IE8及以下版本,您可以获得随机的“光线”&#39; hsl中的颜色,通过随机改变色调并将饱和度设置为50%,将光分量设置为75%。

var lightColor='hsl('+Math.floor(Math.random()*361)+',50%,75%)';

var lightColor =&#39; hsl(&#39; + Math.floor(Math.random()* 361)+&#39;,50%,75%)&#39;;

如果旧浏览器需要,您可以将hsl颜色(足够近)转换为rgb -

function hslToRgb(hsl){
    if(typeof hsl== 'string'){
        hsl= hsl.match(/(\d+(\.\d+)?)/g);
    }
    var sub, h= hsl[0]/360, s= hsl[1]/100, l= hsl[2]/100, 
    t1, t2, t3, rgb, val;
    if(s== 0){
        val= Math.round(l*255).minmax(0, 255);
        rgb= [val, val, val];
    }
    else{
        if(l<0.5)   t2= l*(1 + s);
        else t2= l + s - l*s;
        t1= 2*l - t2;
        rgb= [0, 0, 0];
        for(var i= 0; i<3; i++){
            t3= h + 1/3*-(i - 1);
            t3<0 && t3++;
            t3>1 && t3--;
            if(6*t3<1) val= t1 +(t2 - t1)*6*t3;
            else if(2*t3<1) val= t2;
            else if(3*t3<2) val= t1 +(t2 - t1)*(2/3 - t3)*6;
            else val= t1;
            rgb[i]= Math.round(val*255).minmax(0, 255);
        }
    }
    return 'rgb('+rgb.join(',')+')';
}

lightColor +&#39;〜=&#39; + hslToRgb(lightColor);

/ *返回值:(String) hsl(88,50%,75%)〜= rgb(193,223,159) * /