【问题标题】:Turning RGB values into HSL values in a random Javascript在随机 Javascript 中将 RGB 值转换为 HSL 值
【发布时间】:2012-12-28 15:10:28
【问题描述】:

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

http://www.reportageborsen.se/reportageborsen/wordpress/

我从 stackoverflow 的伙伴那里得到了一些非常好的帮助,这导致了这个脚本:

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();
    });
});​

小提琴链接:http://jsfiddle.net/b5ZPq/3/

但是,我希望拥有更多更亮的颜色,而更少的灰色。我知道可以使用 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();
    });
});​

http://jsfiddle.net/zolana/Kc9U4/5/ (小提琴,更新,工作: http://jsfiddle.net/zolana/Kc9U4/9/ )

(我不是在寻找将所有 RGB 值转换为 HSL 值的脚本(我知道有用于此目的的脚本),而是为这个特定任务提供可靠的脚本。)

【问题讨论】:

  • 我不明白... HSL 中表示的颜色如何比 RGB 空间中表示的颜色更亮?
  • @ppeterka 他们不是......但在某些方面使用随机值更容易获得更亮的颜色,因为最后一个参数是 L 表示亮度。
  • @Nile 我熟悉颜色空间,并想指出问题中措辞的错误选择 - 它会误导任何不确定表示颜色如何工作的人......(并且懒惰使用谷歌或维基来照顾事情 - 我认为那里有一些......)

标签: javascript css random rgb hsl


【解决方案1】:

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

hsl ( int hue , int saturation % , int lightness %)

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

var hue = 'hsl(' + getRandomInRange(0, 360) + ',' + getRandomInRange(70, 100) + '%,' + getRandomInRange(45, 55) + '%)';

http://jsfiddle.net/b5ZPq/4/

【讨论】:

  • 太棒了!你敏锐的眼睛和一个逗号让我很开心。
【解决方案2】:

看看我写的这段代码:

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+")";
}

它生成一个随机的 Hue 值,s 和 v 的恒定值。所以这会返回一个随机的明亮 rgb 颜色。因为我使用了黄金比例,所以颜色也很明亮和不同。如果遇到任何问题,请尝试使用它并返回。

【讨论】:

  • 它看起来真的很有趣,我读过关于使用黄金比例来获得更好的变化。但是,我对 javascript 很陌生,无法真正理解如何在我的脚本中实现你的奇妙功能。
  • 我试过了。在我看来,差异很小。保留它,因为我喜欢它背后的黄金计算。
  • 哦,谢谢。尝试使用 s 和 v 值以获得更多乐趣:)
猜你喜欢
  • 2011-03-29
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2016-08-11
  • 1970-01-01
  • 2020-11-28
相关资源
最近更新 更多