在随机Javascript中将RGB值转换为HSL值

在随机Javascript中将RGB值转换为HSL值,javascript,css,random,rgb,hsl,Javascript,Css,Random,Rgb,Hsl,我有一个随机的颜色覆盖在这个网站的媒体框 stackoverflow wich的同事们给了我一些很好的帮助,我得到了以下脚本: var getRandomInRange = function(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }; $('.media-box').each(function() { var mediaBox = $(this); var mask =

我有一个随机的颜色覆盖在这个网站的媒体框

stackoverflow wich的同事们给了我一些很好的帮助,我得到了以下脚本:

var getRandomInRange = function(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
};
$('.media-box').each(function() {
    var mediaBox = $(this);
    var mask = mediaBox.find('.mask');
    var hue = 'rgb(' + getRandomInRange(100, 255) + ',' + getRandomInRange(100, 255) + ',' + getRandomInRange(100, 255) + ')';
    mask.css({
            backgroundColor : hue,
        opacity : 0.7            
             });
    mediaBox.hover(function() {
        mask.stop(true, true).fadeIn();
    }, function() {
        mask.stop(true, true).fadeOut();
    });
});​
小提琴链接:

然而,我希望有更多的明亮的颜色,而不是灰色的。我知道可以用HSL值而不是RGB值来完成

因此,我尝试将css背景rgb值转换为hsl值,并转换了脚本,但没有成功

var getRandomInRange = function(min, max) {
    return Math.floor(Math.random() * (max - min + 1), 10) + min;
};
$('.media-box').each(function() {
    var mediaBox = $(this);
    var mask = mediaBox.find('.mask');
    var hue = 'hsl(' + getRandomInRange(0, 360) + ',' + getRandomInRange(70, 100) + '%' + getRandomInRange(45, 55) + '%)';
    mask.css({
        backgroundColor: hue,
        opacity: 0.7
    });
    mediaBox.hover(function() {
        mask.stop(true, true).fadeIn();
    }, function() {
        mask.stop(true, true).fadeOut();
    });
});​
(小提琴,更新,工作: )


(我不是在寻找一个将所有RGB值转换为HSL值的脚本(我知道有这样的脚本),而是要为这个特定任务提供一个坚实的脚本。)

请记住,当使用HSL颜色(和其他颜色)时,需要用逗号分隔每个值,并使用正确的符号。在本例中,它如下所示

hsl(整数色调、整数饱和度%、整数亮度%

第二个参数后缺少逗号(特别是在百分号之后)


看看我写的代码:

function randomColor(){
    var h = Math.random();
    var s = 0.99;
    var v = 0.99;

    h = h + 0.618033988749895;
    h = h % 1;

    var r, g, b;

    var i = Math.floor(h * 6);
    var f = h * 6 - i;
    var p = v * (1 - s);
    var q = v * (1 - f * s);
    var t = v * (1 - (1 - f) * s);

    switch(i % 6){
        case 0: r = v, g = t, b = p; break;
        case 1: r = q, g = v, b = p; break;
        case 2: r = p, g = v, b = t; break;
        case 3: r = p, g = q, b = v; break;
        case 4: r = t, g = p, b = v; break;
        case 5: r = v, g = p, b = q; break;
    }

    return "rgba("+Math.floor(r*255)+","+ Math.floor(g*255)+","+ Math.floor(b*255)+","+ 0.2+")";
}

它生成一个随机色调值,即s和v的常量值。这将返回一个随机的明亮rgb颜色。而且颜色是明亮和不同的,因为我使用了黄金比例。尝试使用此功能,如果遇到任何问题,请返回。

我不明白。。。HSL中表示的颜色如何比RGB空间中表示的颜色更亮?@ppeterka它们不是。。。但在某些方面,使用随机值更容易获得更亮的颜色,因为最后一个参数是L表示亮度。@Nile我熟悉颜色空间,并想指出问题中的措辞选择不当-这会误导任何不确定颜色表示方式的人。。。(而且懒得用谷歌或维基来照看东西——我想还有一些…)太棒了!你锐利的眼睛和一个逗号让我很开心。它看起来真的很有趣,我读过关于使用黄金比例来获得更好的变化。然而,我对javascript还很陌生,不能真正理解如何在我的脚本中实现你的神奇功能。我试过了。我觉得差别很小。保留它是因为我喜欢它背后的黄金计算。哦,谢谢。尝试使用s和v值以获得更多乐趣:)
function randomColor(){
    var h = Math.random();
    var s = 0.99;
    var v = 0.99;

    h = h + 0.618033988749895;
    h = h % 1;

    var r, g, b;

    var i = Math.floor(h * 6);
    var f = h * 6 - i;
    var p = v * (1 - s);
    var q = v * (1 - f * s);
    var t = v * (1 - (1 - f) * s);

    switch(i % 6){
        case 0: r = v, g = t, b = p; break;
        case 1: r = q, g = v, b = p; break;
        case 2: r = p, g = v, b = t; break;
        case 3: r = p, g = q, b = v; break;
        case 4: r = t, g = p, b = v; break;
        case 5: r = v, g = p, b = q; break;
    }

    return "rgba("+Math.floor(r*255)+","+ Math.floor(g*255)+","+ Math.floor(b*255)+","+ 0.2+")";
}