我正在编码一个" simon say say" freecodecamp的项目,该项目可以跟踪计算机的随机颜色选择和用户点击响应,以遵循点亮的颜色模式。
但是,我遇到了一个问题。。。当计算机随机运行选择时,我的颜色不会将其不透明度重新变回非透明度。
我尝试将setTimeout
更快,更慢的时间(例如10或1000毫秒)重置为非透明剂,但这尚未起作用。
这是我当前的代码:
$(document).ready(function(){
var colors = [".red",".blue",".yellow",".green"];
var classVariable = [];
$(".grass").click(function(){
$(this).toggleClass(".grass").css("opacity",0.23);
if($(this).is('.red')){
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound1.mp3');
myAudio.play();
}else if($(this).is('.blue')){
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound2.mp3');
myAudio.play();
}else if($(this).is('.yellow')){
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound3.mp3');
myAudio.play();
}else if($(this).is('.green')){
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound4.mp3');
myAudio.play();
}
setTimeout(function(){
$(".grass").css("opacity", 1);
}, 100);
});
function computerDisplay(){
for(var i = 0;i< colors.length;i++){
let ranSelect = colors[Math.floor(Math.random() * 4 /*colors.length*/)];console.log(ranSelect);
classVariable.push(ranSelect);console.log(classVariable);
$(ranSelect).toggleClass(".grass").css("opacity",0.23);
if($(ranSelect).is('.red')){
setTimeout(function(){
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound1.mp3');
myAudio.play();
},1000);
}else if($(ranSelect).is('.blue')){
setTimeout(function(){
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound2.mp3');
myAudio.play();
},1000);
}else if($(ranSelect).is('.yellow')){
setTimeout(function(){
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound3.mp3');
myAudio.play();
},1000);
}else if($(ranSelect).is('.green')){
setTimeout(function(){
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound4.mp3');
myAudio.play();
},1000);
}
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound1.mp3');
myAudio.play();
setTimeout(function(){
$(ranSelect).css("opacity", 1);
},500);
}
}
$(".start").click(function(){
setTimeout(function(){
computerDisplay();
},1000);
});
});
div{
margin:0 auto;
}
.red{
width:100px;
height:100px;
background-color:red;
}
.blue{
width:100px;
height:100px;
background-color:blue;
}
.green{
width:100px;
height:100px;
background-color:green;
}
.yellow{
width:100px;
height:100px;
background-color:yellow;
}
<html>
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="fsp.css" type="text/css" />
<script src="fsp.js"></script>
<body>
<div class="container text-center">
<div class="row">
<div class="red col-xs-6 grass"></div>
<div class="blue col-xs-6 grass"></div>
</div>
<div class="row">
<div class="green col-xs-6 grass"></div>
<div class="yellow col-xs-6 grass"></div>
</div>
</div>
<div class="start">
<button>start</button>
</div>
</body>
</head>
</html>
您的代码一直在颜色中迭代,每个选择随机颜色并触发它,因此,将立即触发1-4 [不同]随机选择的1-4 [不同]。相反,我认为每次单击start
时,您都会将随机颜色推向classVariable
,然后迭代这些颜色。但是,您不能仅用for
循环迭代它们,因为您想要每个循环之间的延迟。因此,您将随后将setTimeout
S本身本身用于下一个迭代的函数。
尝试一下:
$(document).ready(function(){
var colors = ['.red','.blue','.yellow','.green'];
var classVariable = [];
$(".grass").click(function(){
$(this).toggleClass(".grass").css("opacity",0.23);
if($(this).is('.red'))
{
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound1.mp3');
myAudio.play();
}
else if($(this).is('.blue'))
{
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound2.mp3');
myAudio.play();
}
else if($(this).is('.yellow'))
{
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound3.mp3');
myAudio.play();
}
else if($(this).is('.green'))
{
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound4.mp3');
myAudio.play();
}
setTimeout(function(){
$(".grass").css("opacity", 1);
},100);
});
function doTheThing(index)
{
if(index < classVariable.length)
{
var target = $(classVariable[index]);
var myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound1.mp3');
if(target.is('.red'))
{
myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound1.mp3');
}
else if(target.is('.blue'))
{
myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound2.mp3');
}
else if(target.is('.yellow'))
{
myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound3.mp3');
}
else if(target.is('.green'))
{
myAudio = new Audio('https://s3.amazonaws.com/freecodecamp/simonSound4.mp3');
}
target.toggleClass(".grass").css("opacity",0.23);
setTimeout(function(){
myAudio.play();
},250);
setTimeout(function(){
$(target).css("opacity",1);
doTheThing(index + 1);
},500);
}
}
function computerDisplay()
{
classVariable.push(colors[Math.floor(Math.random() * colors.length)]);
console.log(classVariable);
doTheThing(0);
}
$(".start").click(function(){
setTimeout(function(){
computerDisplay();
},1000);
});
});