您需要创建一个可能值的数组,并每次从该数组中检索随机索引以使用其中一个值,然后将其从数组中删除。
这是一个通用的随机函数,它不会重复使用所有的值,您可以调用此函数,然后只需将此索引添加到类名的末尾即可。
var uniqueRandoms = [];
var numRandoms = 5;
function makeUniqueRandom() {
if (!uniqueRandoms.length) {
for (var i = 0; i < numRandoms; i++) {
uniqueRandoms.push(i);
}
}
var index = Math.floor(Math.random() * uniqueRandoms.length);
var val = uniqueRandoms[index];
uniqueRandoms.splice(index, 1);
return val;
}
工作演示:http://jsfiddle.net/jfriend00/H9bLH/
所以,你的代码只需要这样:
$(this).addClass('color-' + (makeUniqueRandom() + 1));
这是一个面向对象的表单,可以让您在应用程序的不同位置使用多个表单:
function randomGenerator(low, high) {
if (arguments.length < 2) {
high = low;
low = 0;
}
this.low = low;
this.high = high;
this.reset();
}
randomGenerator.prototype = {
reset: function() {
this.remaining = [];
for (var i = this.low; i <= this.high; i++) {
this.remaining.push(i);
}
},
get: function() {
if (!this.remaining.length) {
this.reset();
}
var index = Math.floor(Math.random() * this.remaining.length);
var val = this.remaining[index];
this.remaining.splice(index, 1);
return val;
}
}
示例用法:
var r = new randomGenerator(1, 9);
var rand1 = r.get();
var rand2 = r.get();
演示: http://jsfiddle.net/jfriend00/q36Lk4hk/
1
到5
的范围,然后打乱该数组。 - elclanrs