javascript - 延迟更改颜色两次的问题
问题描述
我最近开始了我的前端之旅,我想使用 HTML、CSS 和 JavaScript 创建一个类似于“Simon Says”的简单游戏。
我希望应用程序将第一个字段标记为绿色以显示序列,然后 - 在短暂的延迟之后 - 将其更改回默认颜色(白色)。在与第二个按钮相同之后,第三个......等等。
结果我得到了这个:
function showFields() {
for( var x = 0; x<computerSeq.length; x++) {
field[computerSeq[x]].style.backgroundColor = "green";
setTimeout(() => {
field[computerSeq[x]].style.backgroundColor = "white";
}, 1000);
}
}
然而,它并没有像我想象的那样工作,因为背景一直是白色的。我附上下面的其余代码: https ://codepen.io/jhrwekuh/pen/wYrYgV
解决方案
这里的问题是只有在循环结束运行setTimeout
后才会执行回调。for
这就是为什么回调setTimeout
将收到x
循环执行后将获得的值的原因。您可以通过使用 IIFE(立即调用的函数表达式)将实际值传递x
到回调中来修复此代码:
setTimeout((index => () => {
field[computerSeq[index]].style.backgroundColor = "white";
})(x), 1000);
推荐阅读
- spring-boot - springboot应用程序中的Jmslistener不起作用
- css - 为顺风配置添加 !important 和选择器策略
- java - Apache Poi 最佳方式
- unity3d - 如何实现 Unity Metaball?
- r-markdown - 自定义 Flexdashboard 的导航栏
- php - 如何修复 axios 发布请求上的错误 422?
- php - 模型的属性如何在 Livewire Laravel 中默认为原始属性
- html - 在根而不是文档中添加 CSS 变量(自定义属性)
- docker - 如何在 docker laravel 容器中监控和列出请求率(命中率)
- audio - 设置持续时间时 AudioBufferSourceNode 不循环