javascript - 如何暂停 Javascript 执行

标签 javascript dom settimeout pause

我有一个想要迭代的元素数组,为每个有问题的 DOM 元素添加 Class,1 秒后使用 removeClass 将其删除,然后移动到数组中的下一个元素并执行相同的操作。

相反,数组中的所有元素都会同时应用 addClass,然后按顺序删除每个元素,间隔 1 秒。因此,removeClass 行可以正常工作,但我不明白为什么 addClass 行不行。我可以手动输入 addClass 的 MS 数量,这将按预期工作。

function runSequence () {    
  randomSequence();    
  for (let i = 0, timer=0; i < sequence.length; i++) {    
    setTimeout(function () { $('.' + sequence[i]).addClass('button-press'); }, (timer * 1000));
    setTimeout(function() { $('.' + sequence[i]).removeClass('button-press'); }, ((timer++) * 1000));
  }
}

最佳答案

每次您想延迟时,等待 Promise 可能会更容易:

const sequence = ['foo', 'bar', 'baz', 'buzz'];
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

async function runSequence() {
  for (let i = 0; i < sequence.length; i++) {
    const $elm = $('.' + sequence[i]);
    $elm.addClass('button-press');
    await delay(1000);
    $elm.removeClass('button-press');
  }
}

runSequence();
.button-press {
  background-color: yellow;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="foo">div</div>
<div class="bar">div</div>
<div class="baz">div</div>
<div class="buzz">div</div>

关于javascript - 如何暂停 Javascript 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59762779/

相关文章:

使用 IIFE 的 Javascript 变量作用域

javascript - 无法使用 document.cookie(本地 HTML 文件)从以前的 session 中检索 cookie

javascript - jQuery 1.9 中 DOM 更改后事件无法触发

javascript - MooTools 垂直对齐插件功能

javascript - setTimeout 与日期对象

javascript - 格式化 RSS feed pubDate

javascript - 我的网站中是否需要非缩小版本的 jQuery 脚本?

javascript - 使用 Javascript 在 HTML 页面上隐藏按钮的最佳方法

javascript - 如何在函数中清除此 setInterval?

javascript - setTimeout/Loop...仍然很困惑