jQuery:生成尚未使用的独特随机颜色

时间:2014-11-15 07:56:25

标签: javascript jquery

http://jsfiddle.net/8ysuw/

Colors.random = function() {
    var result;
    var count = 0;
    for (var prop in this.names)
        if (Math.random() < 1/++count)
           result = prop;
    return { name: result, rgb: this.names[result]};
};

我想确保一旦调出它就不会出现相同的颜色。目前它将继续生成随机颜色,有时会显示相同的颜色。

此外,我需要清除之前使用过的所有颜色,因此整个过程可以从头开始。

2 个答案:

答案 0 :(得分:2)

Colors.called = {};
Colors.random = function () {
    var keys   = Object.keys(this.names),
        max    = keys.length,
        called = Object.keys(this.called),
        color  = keys[Math.floor(Math.random() * (max - 0)) + 0];

    if (Colors.called[color]) {
        if (max === called.length) {
            Colors.called = {};    
        }

        return Colors.random();             
    }

    Colors.called[color] = true;
    return { name: color, rgb: this.names[color] };
};

DEMO:http://jsfiddle.net/8ysuw/75/

答案 1 :(得分:1)

您可以使用所有颜色代码/名称填充数组(不确定您需要哪一个)并在返回之前删除所选元素。

var colorFactory = (function () {
    var allColors = ["red", "green", "blue"];
    var colorsLeft = allColors.slice(0);

    return {
        getRandomColor: function () {
            if (colorsLeft.length === 0) {
                return undefined;
            }

            var index = Math.floor(Math.random() * colorsLeft.length);
            var color = colorsLeft[index];
            colorsLeft.splice(index, 1);
            return color;
        },
        reset: function () {
            colorsLeft = allColors.slice(0);
        }
    };
}());

// Usage:
// Get a random color
var someColor = colorFactory.getRandomColor();

// Reset: mark all colors as unused
colorFactory.reset();