数组中的随机十六进制颜色

时间:2014-10-07 14:07:18

标签: javascript css random hex

我有以下代码,我试图简单地让同位素网格中的每个项目具有不同的Hex值背景颜色。此代码在一定程度上起作用,但同位素中的每个项目都是相同的颜色,而不是随机的颜色。任何帮助非常感谢,我不是JS专家,并从各种来源黑客攻击以达到当前状态。

如果任何人有一个更优雅的解决方案作为修复的替代方案,我都是耳朵!

干杯

JS

$(document).ready(function() {
  var colors = ["#E1A2AC","#FDC300","#56AF31", "#39B6AB"];                
  var rand = Math.floor(Math.random()*colors.length);           
  $('.colour-array').css("background-color", colors[rand]);
});

HTML

<article class="<?php echo $termsString; ?> isotope-brick">

    <a href="<?php the_permalink(); ?>">
    <div id="brick-overlay" class="colour-array">
            <h2><?php the_title(); ?></h2>
            <h5><?php the_excerpt(); ?></h5>
            <h4><?php $category = get_the_category(); echo $category[0]->cat_name;?></h4>
    </div><!-- end brick-overlay -->
    </a>

    <div id="brick-info">
            <h2><?php the_title(); ?></h2>
            <h4 class="colour-array"><?php $category = get_the_category(); echo $category[0]->cat_name;?></h4>
    </div><!-- end brick-info -->

        <?php if ( has_post_thumbnail() ) { 
                  the_post_thumbnail();
            } ?>
</article>

4 个答案:

答案 0 :(得分:1)

因为您的代码对随机数组执行了一次。 你需要把它放在循环中。

答案 1 :(得分:1)

我宁愿尝试类似的事情:

$(document).ready(function() {
  var colors = ["#E1A2AC","#FDC300","#56AF31", "#39B6AB"];
  $.each($('.colour-array'),function(ind,obj){
    var rand = Math.floor(Math.random()*colors.length);
    $(obj).css("background-color",colors[rand]);
  });
});

检查fiddle

答案 2 :(得分:1)

我刚刚意识到jQuery有时会有多棒。您可以为css函数(docs)提供“值提供程序”功能。检查一下:

$(document).ready(function() {
  var colors = ["#E1A2AC","#FDC300","#56AF31", "#39B6AB"];
  $('.colour-array').css("background-color",function(){
    return colors[Math.floor(Math.random()*colors.length)];
  });
});

更新了jsfiddle

<击> 编辑: 关于你的最后评论,我已经提出了一个可能的解决方案,但是非常丑陋的是将一个属性的值复制到另一个属性中。 jsfiddle。 我不喜欢这里提出的解决方案,因为它取决于jQuery的css处理给定地图中的属性的顺序。更好地使用下一个。

修改 我有一个更好的主意,虽然它需要一些重构 - 首先计算每个对象的颜色,然后分配所有。这里有jsfiddle和代码:

$(document).ready(function() {
  var colors = ["#E1A2AC","#FDC300","#56AF31", "#39B6AB"];
    var colorMap = {};
    var colorArray = $('.colour-array');
    $.each(colorArray ,function(ind,obj){
        colorMap[ind] = colors[Math.floor(Math.random()*colors.length)];
    });
    var colorProvider = function(ind){
        return colorMap[ind];
    };
    colorArray.css({
        "background-color":colorProvider,
        "color":colorProvider
    });
});

答案 3 :(得分:1)

为了实现您在评论中描述的目标并考虑到您发布的HTML结构,我会采取相反的方式。

JavaScript的:

$(document).ready(function () {
  colorsCount = 4;
  var colorArray = $('.isotope-brick');
  $.each(colorArray, function (ind, obj) {
    $(obj).addClass('color' + Math.floor(Math.random() * colorsCount));
  });
});

和CSS(每种颜色的两个条目是必要的,但是当需要稍微不同的阴影时它会提供弹性,所以没问题: - )

.isotope-brick.color0 .brick-overlay {
    background-color:#E1A2AC;
}

.isotope-brick.color0 .brick-info {
    color:#E1A2AC;
}

此处的工作示例jsfiddle

一个小小的评论:我将brick-overlaybrick-info ID更改为CSS类,因为我认为您将在该网站上发布多篇文章。我强烈建议你这样做。这是the why