javascript - 使用javascript分配随机选择的颜色

标签 javascript jquery css performance math

我的页面中有一个网格,我想通过 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 等等,不是 red-red-green-yellow)。

也许这有助于随机化过程,Fisher–Yates Shuffle ,但我不知道如何实现上述非两次相邻规则(如果可以应用的话)。

实现此结果的最佳方法是什么?我还想知道我是否可以对每个 .block 应用渐变而不是扁平的十六进制颜色;我想更好的方法是为渐变等在 CSS 中映射的每个元素分配一个随机类。

如果上述脚本可以在性能方面进行优化,我很感激任何建议!

附加信息:

  • 我正在使用 jQuery
  • 网格由每行 20 个元素组成,共 10 行
  • 颜色应该是 4 种,但如果有帮助,可以增加到 5-7 种中性灰色调

这里有一支笔可以用来做实验 http://codepen.io/Gruber/pen/lDxBw/

额外功能请求:如上所述,我想避免重复的相邻颜色。是否也可以“上下”避免这种情况?我想完全避免这种情况即使不是不可能也是非常困难的,但是如果有人能找到解决方案那就太棒了! 像这样,“nope”标记元素被阻止,而“yep”对 Angular 线标记被允许:

enter image description here

最佳答案

$(function () {
  var colors = ["red","blue","green","yellow"];
  var $gd = $(".grid");
  var previousColor;
  var blocks="";
  for(i=0; i < 200; i++){
    var color = "";
    while(color === previousColor) {
        color= colors [Math.floor(Math.random()*colors .length)];
    }
    blocks += '<div class="block" style="color:' + color + '"></div>';
    previousColor = color;
  }
  $gd.append(blocks);
});

关于javascript - 使用javascript分配随机选择的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22467842/

相关文章:

jquery - jQuery + swfupload 中出现 z-index 问题

jQuery - 有 child 绝对定位在它外面的动画元素 - 闪烁

html - 元素获得不必要的边距

jquery - 在所需区域显示结果

javascript - 子组件应该在什么级别拥有自己的容器(逻辑react-redux的connect)组件才能管理自己的mapDispatchToProps?

javascript - 为 Javascript 中的选定方法自动注册触发器回调

javascript - 使用 jQuery 单击后更改 anchor 文本

javascript - 基于浏览器插件的 RIA 与基于 Java Script 的 RIA 的性能

javascript - jQuery - 如何使水平拆分器显示在中间,即使屏幕已重新调整大小时

html - 为什么这张图片在网上加载时损坏了,但当我预览时却没问题?