2

このサイトのメディアボックスにランダムなカラーオーバーレイがあります。

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/

ただし、明るい色を増やし、灰色がかった色を減らしたいと思います。RGB値の代わりにHSL値で実行できることを理解しています。

そこで、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値に変換するスクリプトを探していません(その目的のスクリプトがあることは知っています)。)

4

2 に答える 2

4

HSL色(およびその他)を使用する場合は、各値をコンマで区切り、正しい表記を使用する必要があることに注意してください。この場合、次のようになります。

hsl(int色相、int彩度 、int明度

2番目の引数の後(特にパーセント記号の直後)にコンマがありませんでした。

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

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

于 2012-12-28T15:14:23.763 に答える
1

私が書いたこのコードをチェックしてください:

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カラーを返します。また、黄金比を使用しているため、色が明るく異なっています。これを使用して、問題が発生した場合は元に戻してください。

于 2012-12-28T15:16:51.427 に答える