两个setIntervals没有按顺序激活并在不同时间触发

冰精灵

我正在尝试在simonGame中产生闪烁效果,并且使这些函数将css的颜色更改为突出显示的颜色,然后又恢复为正常,它们从数组中获取随机序列并更改数组中的颜色:

game.computerMoves = [green, blue, blue, blue, red, red, yellow];

function showMoves () {

  let i = -1;

  const start = setInterval(function(){
  if(i >= game.computerMoves.length-1){
    clearInterval(start);
  }

  console.log(i + 'start ' + game.computerMoves.length);

  const showColors = new Map([
    [green, 'lime'],
    [yellow, 'rgb(255,255,102)'],
    [blue, 'dodgerblue'],
    [red, 'salmon'],
  ]);

  i++;

  let move = game.computerMoves[i];

  move.style.backgroundColor = showColors.get(move);
 }, 1000);
}

//revert the colors that were changed in showMoves
function removeMoves() {
  let c = -1;
  //put at 2 seconds to change after showMoves is done
  const computerStop = setInterval(function(){

  console.log(c + 'stop ' + game.computerMoves.length);

  if(c >= game.computerMoves.length-1){
     clearInterval(computerStop);

    }
 const colorKey = new Map([
  [green, 'green'],
  [yellow, 'yellow'],
  [red, 'red'],
  [blue, 'blue']
]);

  c++;

  let move = game.computerMoves[c];

   move.style.backgroundColor = colorKey.get(move);
  }, 2000);
}

并且此函数同时启动它们:

function startFlashing(){
  showMoves();
  removeMoves();
 }

我将removeMoves设置为每2秒启动一次,以便它可以在showMoves完成1秒后激活以创建闪烁效果,但是showMoves首先创建一个闪烁效果,但是showMoves的发射速度比removeMoves快几倍,而不是在触发之后快一倍。其他和showMoves在showMoves已经遍历数组后触发两次。我将不胜感激。

安尼尔·雷德shift

您可以将其组合为一个计时器,该计时器每秒触发一次,然后相应地切换状态。见下文:

const green = 'GREEN';
const blue = 'BLUE';
const red = 'RED';
const yellow = 'YELLOW';
const game = {
  computerMoves: [green, blue, blue, blue, red, red],
};

const move = document.getElementById('move');

const showColors = new Map([
  [green, 'lime'],
  [yellow, 'rgb(255,255,102)'],
  [blue, 'dodgerblue'],
  [red, 'salmon'],
]);

const hideColors = new Map([
  [green, 'green'],
  [yellow, 'yellow'],
  [red, 'red'],
  [blue, 'blue'],
]);

const startFlashing = () => {
  let i = -1;
  let visible = true;
  const interval = setInterval(() => {
    if (visible) {
      i += 1;
    }

    if (i >= game.computerMoves.length) {
      clearInterval(interval);
      return;
    }

    visible = !visible;
    colorMapper = visible ? showColors : hideColors;
    const turn = game.computerMoves[i];
    const color = colorMapper.get(turn);
    console.log(`visible: ${visible}, color: ${turn}`);
    move.style.backgroundColor = color;
    
  }, 1000);
}

startFlashing();
#move {
  width: 100px;
  height: 100px;
  border: 2px solid black;
}
<html>
  <body>
    <div id="move"></div>
  </body>
</html>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用参数显示两个不同时间之间的所有时间

合并两个具有不同时间粒度的时间序列

如何合并具有不同时间戳的两个不同数据帧?

Pandas:在两个不同时间序列中按日期顺序分组在同一 ID 下的列表中显示事件

SQL查询以合并两个具有不同时间戳的表作为索引

如何合并具有不同时间戳密度的两个熊猫数据帧?

如何合并两个具有不同时间戳的熊猫

带有两个不同时间索引的熊猫数据帧操作(除法乘法)

在具有不同时间戳的两个文档之间减去数字字段

合并具有不同时间戳(不同时间间隔)的两个数据帧

在Sql中按日期和同一日期的两个不同时间分组

SparkSQL:如何对两个具有不同时间戳的时间序列数据集求和

如何并排组合两个具有不同时间框架但有空白的 Panda 数据框

Bash 命令对具有不同时间序列行的两个 csv 文件进行列合并

“复制但保留两个文件”,但仅适用于具有不同时间戳记的文件

查找两个不同时间之间是否存在时间,键入问题

从两个不同长度的数组中获取值的不同时间

如何将不同时间收集的两个不同输入关联起来,并在需要时召回它们?

用numpy减去两个交错的,基于不同时间序列的数组?

XCTest运行输出的两个不同时间是什么?

在两个不同时间之间运行作业计划程序

同一日期两个不同时间之间的值差

如何设置两个curl命令以永远在不同时间执行?

用于将不同时间间隔的两个信号相加的 MATLAB 代码

如何在python中的同一轴上绘制具有不同时间频率的两个时间序列数据?

使用两个不同的位置对象进行相同时间的时间比较失败?

如何在Python Matplotlib中绘制两个具有不同时间间隔的数据集并使它们共享轴

如何修复我的 Pandas 代码,以便正确比较来自两个不同时间点的观察结果?

这两个代码没有按顺序执行?