foreach中的Settimeout无法正常工作

时间:2017-12-29 11:53:46

标签: javascript jquery

pattern.forEach( function(elem, index) {

            setTimeout(yo(elem),index*1000);

                function yo(elem){
                    console.log(elem);
                switch (elem) {
                    case 'blue':
                        // statements_1
                        $('#blue').css('background-color','grey');
                        bsound.play();
                        setTimeout(function(){$('#blue').css('background-color','blue');},500);
                        break;
                    case 'green':
                        // statements_1
                        $('#green').css('background-color','grey');
                        gsound.play();
                        setTimeout(function(){$('#green').css('background-color','green');},500);
                        break;
                    case 'red':
                        // statements_1
                        $('#red').css('background-color','grey');
                        bsound.play();
                        setTimeout(function(){$('#red').css('background-color','red');},500);
                        break;
                    case 'yellow':
                        // statements_1
                        $('#yellow').css('background-color','grey');
                        ysound.play();
                        setTimeout(function(){$('#yellow').css('background-color','yellow');},500);
                        break;

                }

            }
            });
嘿,伙计们,我正在努力建立一个西蒙游戏。现在随着游戏跟随计算机将生成随机模式。每种颜色都有其特定的声音。现在我在这里使用的逻辑是我们将使用foreach方法循环模式数组。在每个元素,我将调用带有索引* 1000的settimeout回调函数。我将索引与ms相乘,因此每次调用之间都存在差距。现在,如果我有一个说['red']的模式数组,它就可以了。 for ['red','yellow']它将同时播放黄色和红色的两个块声音,并且还会将这些块的颜色更改为灰色并将其更改回原始颜色(问题是它是否同时执行此操作)。如果['red','yellow','red']它会像['red','yellow']那样做(意思是它会跳过红色的声音)。 任何人都可以告诉我为什么会这样。我搜索了stackoverflow,人们建议使用index * ms来获得所需的延迟......

0 个答案:

没有答案