【发布时间】:2014-03-17 23:58:47
【问题描述】:
我的页面中有一个网格,我想通过 javascript 填充 200 个元素。填充.grid 元素的实际代码如下:
$(function () {
var $gd = $(".grid");
var blocks="";
for(i=0; i < 200; i++){
blocks += '<div class="block"></div>';
}
$gd.append(blocks);
});
我现在要做的是为每个元素分配从列表中随机选择的颜色。可以说红色,蓝色,黄色,绿色(出乎意料的嗯?)。我希望这些值尽可能随机,并避免同样的颜色被再次选择两次(为了清楚起见,可以使用red-blue-red-green-blue 等等,NOTred-red-green-yellow)。
也许这可以帮助随机化过程,Fisher–Yates Shuffle,但我不知道如何实现上述非两次相邻规则(如果可以应用的话)。
实现此结果的最佳方法是什么?我还想知道是否可以对每个 .block 应用渐变而不是平面十六进制颜色;我想更好的方法是为每个在 CSS 中映射的元素分配一个随机类以用于渐变等等..
如果上述脚本可以在性能方面进行优化,我很感激任何建议!
附加信息:
- 我正在使用 jQuery
- 网格由每行 20 个元素组成,共 10 行
- 颜色应该是 4,但如果有帮助,可以提高到 5-7 添加一些中性灰色调
这是一支可以试验的笔 http://codepen.io/Gruber/pen/lDxBw/
额外功能请求: 如上所述,我想避免重复的相邻颜色。是否也可以“上下”避免这种情况?我想完全避免这种情况即使不是不可能也非常困难,但是如果有人能找到解决方案,那就太棒了! 像这样,“nope”标记元素被阻止,而“yep”对角线标记被允许:
【问题讨论】:
-
最后,所有答案都为我正在研究的其他东西带来了有趣的解决方案和想法,但确实@phil-h 解决方案是解决这个问题的最巧妙的方法。我发布的笔更新了他的代码以及响应性和渐变的一些增强。
标签: javascript jquery css performance math