jquery随机颜色foreach div
我的function有这个问题,我试图将一些颜色(预定义)随机化到我的div,并在每次使用颜色时进行计数。
这是我的HTML:
而一些将以随机颜色为背景的div:
这是我的js代码:
function colorfy_me() { var myColors = [ '#543326', '#5EC631', '#A9D7DC', '#003946', '#E0D8C8' ]; shuffleArray(myColors); var i = 1; $('div.change_color').each(function() { $(this).css('background-color', myColors[i]); i = (i + 1) % myColors.length; }); } function shuffleArray(array) { for (var i = array.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = array[i]; array[i] = array[j]; array[j] = temp; } return array; }
但问题是它会随机改变集合中前5个div的颜色。 我不知道如何计算每种颜色。
我创造了一个小提琴
我最终得到了这个: http : //jsfiddle.net/GXVUE/1/
它只是通过class =“stats”将统计数据输出到div中。
(function($){ var colors = ['#f00', '#0f0', '#00f'] , colorsUsed = {} , $divsToColor = $('.random-color'); $divsToColor.each(function(){ var $div = $(this) , randomColor = colors[ Math.floor( Math.random() * colors.length ) ]; $div.css('backgroundColor', randomColor); // Keeps track of how often a color is used... if( colorsUsed[randomColor] ){ colorsUsed[randomColor]++; } else { colorsUsed[randomColor] = 1; } }); // This reads through the stats. $('.stats').html(function(){ var out = []; for( var color in colorsUsed ){ out.push( color + ' was used ' + colorsUsed[color] + ' times.' ); } return out.join('
'); }); })(jQuery);
为什么不使用包含颜色和使用次数的对象填充数组,而不是仅使用颜色数组。 像这样的东西:
var myColors = [ { color: '#543326', uses: 0 }, { color: '#5EC631', uses: 0 }, { color: '#A9D7DC', uses: 0 }, { color: '#003946', uses: 0 }, { color: '#E0D8C8', uses: 0 } ];
然后你可以像这样分配你的颜色:
$(this).css('background-color', myColors[i].color);
并跟踪您使用每种颜色的次数:
myColors[i].uses++;
如果您不喜欢写出对象文字,您甚至可以创建一个函数来获取原始颜色数组并将其转换为对象。
function MakeColorObjects(arrayOfColors) { var objs = []; for (var i=0; i
如果你想变得非常聪明,你可以创建一些会自动跟踪它们的用法的对象:
function TrackedColor(colorCode) { var self = this; var uses = 0; function getUses() { return uses; } function getColor() { uses++; return colorCode; } function resetCount { uses = 0; } }
现在您可以像这样使用:
var myColors = [ new TrackedColor('#543326'), new TrackedColor('#5EC631'), new TrackedColor('#A9D7DC'), new TrackedColor('#003946'), new TrackedColor('#E0D8C8') ];
和:
$(this).css('background-color', myColors[i].getColor());
而且您不必担心忘记增加使用次数,因为它维持了自己的状态。 您可以使用检索当前值
myColors[i].getUses();
- 如何使用jquery连接两个数组对象而不添加重复项
- 使用jquery获取div内容的值
- $(’#foo’)。remove(’a’)和$(’#foo’)。find(’a’)。remove()之间的区别
- id中带有$的元素不能在jquery中更改
- ajax与jquery和php错误:error {“readyState”:0,“responseText”:“”,“status”:0,“statusText”:“error”}
- jQuery ajax发送json并返回html
- serialize和serializeObject jquery之间的区别
- 使用jquery防止div内所有链接的默认值
- jQuery – 使用变量作为函数名