javascript - 随机循环按计划工作,但在几次调用后卡在特定的随机数上

标签 javascript html css for-loop

我使用 css 和 html 创建了 13 个看起来像盒子的对象,每个对象都有独特的背景颜色。然后使用 javascript 添加了一些随机颜色更改功能。

我想要发生的事情:单击 13 个框中的任何一个后,每个框都会变成"new"颜色。这种"new"颜色将从每个盒子最初固定的颜色中随机选择。这将永远持续下去。

发生了什么:当点击框时,它们确实会像我想要的那样改变颜色,但仅点击 ~5-10 次后,它们就会变成完全相同的颜色。

如何让函数继续运行而不是停在某种颜色处?

我可能搞砸了 for 循环/所有 javascript 但无法弄清楚。非常感谢任何帮助。

这是我的完整代码:https://codepen.io/zaemees/pen/roGgGV

部分代码:

html:

<div class="aqua1 specs"></div>
<div class="chartreuse1 specs"></div>
<div class="deeppink1 specs"></div>
<div class="dodgerblue1 specs"></div>
<div class="gold1 specs"></div>
<div class="indigo1 specs"> </div>
<div class="lightpink1 specs"></div>
<div class="mediumpurple1 specs"></div>
<div class="coral1 specs"></div>
<div class="springgreen1 specs"></div>
<div class="red1 specs"></div>
<div class="peachpuff1 specs"></div>
<div class="deepskyblue1 specs"></div>

js:

var bloop = document.getElementsByClassName('specs');

for (var i = 0; i < bloop.length; i++){
  bloop[i].onclick = function() {
    for (var i = 0; i < bloop.length; i++){
   bloop[i].style.backgroundColor = window.getComputedStyle(bloop[Math.floor(Math.random()*13)]).getPropertyValue('background-color');
  }
 }
}

最佳答案

您的代码的主要问题是您没有阻止多次选择相同的颜色。当您第一次运行它时,很可能至少有一种颜色会被选择两次。可以把它想象成只是随机选择 1 到 10 之间的一个数字。随机选择一个不同的数字十次并且永不重复是非常困难的。

因此,当您再次运行您的函数时,您已经更改了每个框的 backgroundColor 属性,其中一些将具有相同的颜色,即您不再有 13 种不同的颜色可供选择。这意味着您的函数第二次运行时,您的选择更少,这种情况会一直持续下去,直到您最终只能选择一种或两种可能的颜色,并且每个框最终都具有相同的颜色。

防止这种情况的一种方法是将您的选择排列成一个数组,并在您选择它时从数组中删除您的选择。这将防止重复,这也是大多数发牌程序的工作方式,因此两个人不会同时发到红心皇后。试试这个例子:

var bloop = document.getElementsByClassName('specs');

for (var i = 0; i < bloop.length; i++) {
  bloop[i].onclick = function() {
    var colours = ['aqua','chartreuse','deeppink','dodgerblue','gold','indigo','lightpink','mediumpurple','coral','springgreen','red','peachpuff','deepskyblue'];
    for (var i = 0; i < bloop.length; i++) {
      var rando = Math.floor(Math.random()*colours.length)
      bloop[i].style.backgroundColor = colours[rando];
      colours.splice(rando, 1);
    }
  }
}
.specs{
  display:inline-block;
	height:100px;
	width:100px;
	border:3px solid white;
}

.aqua1{
	background-color:aqua;
}

.chartreuse1{
	background-color:chartreuse;
}

.deeppink1{
	background-color:deeppink;
}

.dodgerblue1{
	background-color:dodgerblue;
}

.gold1{
	background-color:gold;
}

.indigo1{
	background-color:indigo;
}

.lightpink1{
	background-color:lightpink;
}

.mediumpurple1{
	background-color:mediumpurple;
}

.coral1{
	background-color:coral;
}

.springgreen1{
	background-color:springgreen;
}

.red1{
	background-color:red;
}

.peachpuff1{
	background-color:peachpuff;
}

.deepskyblue1{
	background-color:deepskyblue;
}
<div class="aqua1 specs">
	
</div>

<div class="chartreuse1 specs">
	
</div>

<div class="deeppink1 specs">
	
</div>

<div class="dodgerblue1 specs">
	
</div>

<div class="gold1 specs">
	
</div>

<div class="indigo1 specs">
	
</div>

<div class="lightpink1 specs">
	
</div>

<div class="mediumpurple1 specs">
	
</div>

<div class="coral1 specs">
	
</div>

<div class="springgreen1 specs">
	
</div>

<div class="red1 specs">
	
</div>

<div class="peachpuff1 specs">
	
</div>
<div class="deepskyblue1 specs">
	
</div>

关于javascript - 随机循环按计划工作,但在几次调用后卡在特定的随机数上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53974073/

相关文章:

javascript - 如何通过使用 jQuery 变小来创建 div 慢慢落到某物上的印象?

javascript - jQuery 检查元素是否具有特定样式属性(显示)

html - 纯 CSS 动画模式/灯箱

html - 仅使用 css 更改 div 元素的颜色

javascript - 图像悬停时的下拉菜单(由图像组成)

javascript - 如何用d3js拖动完整的svg?

javascript - 是否有像 onChange 这样的函数也可以监听 JavaScript 的更改?

javascript - 生成的表在 firefox 33 中为空

javascript - ASP.NET - 覆盖浏览器缓存的 Javascript 和样式表

html - CSS 液体水平列表