【发布时间】:2021-03-28 10:01:48
【问题描述】:
我有一个函数可以短暂改变元素的颜色,然后将其改回原始颜色。根据您所处的级别(这是一个益智游戏),forEach 循环然后运行此函数一定次数(在更高级别更多)。目前,元素更改为的颜色是我手动输入到代码中的任何颜色。我正在尝试找到一种方法来在每次 forEach 运行该函数时更改该颜色。
例如,假设你在第一轮,forEach 运行了 3 次,元素会闪烁红白、红白、红白。我需要的是让它闪烁红白、蓝白、粉白。当颜色用完时,它还需要循环回到数组的开头。例如,在更高级别上,forEach 可能会运行 6 次,因此对颜色数组的迭代将不得不回到开始一次。代码如下:
function showCircle(item, j, x) {
setTimeout(function () {
let x = 0;
let colors = ['blue','pink','green']
let color = colors[x];
var num = initArray[j];
var element = document.getElementById(num)
element.classList.add(`cell-glow-${color}`)
window.setTimeout(function () {
element.classList.remove(`cell-glow-${color}`)
}, 400);
j++;
x++
console.log(color)
}, speed() * j);
};
function showEachCircle(captureUserClicks) {
initArray.forEach(showCircle);
}
很明显,上面发生的事情是 showCircle 函数每次都将 x 归零,所以它在第一次迭代时卡住了。但我不确定我应该将这些变量放在哪里以使其正确迭代。另外,我什至还没有开始考虑强制数组回到开头。
有什么想法吗?谢谢!
【问题讨论】:
-
“红-白、蓝-白、粉-白”是指“蓝-白、粉-白、绿-白”吗?因为确实是代码中的颜色。
-
什么是initarray?
-
啊,所以我写的颜色完全是任意的。很抱歉造成混淆 - 我只是在演示功能,但实际值(颜色)可以是任何值。
-
InitArray 在函数外部定义,是函数运行的初始数组,用于指定应该更改哪些 DOM 元素。
标签: javascript arrays loops iteration