javascript - .toggle() 无限且不确定地切换类名

标签 javascript html css

我不明白为什么在使用动画切换类名时 .toggle() 会出现问题。想想我做的这个实验:

var query = document.querySelector.bind(document);

query('button').addEventListener('click', function() {
  [].forEach.call(query('.container').children, function(box, i) {
    setInterval(function() {
      box.classList.toggle('popIn');
    }, 300 * i);
  })
})
.container > .box {
  width: 100px;
  height: 100px;
  background: cyan;
  display: inline-block;
  transform: scale(0);
  transition: all 0.3s ease-in-out;
}

.container > .box.popIn {
  transform: scale(1);
}
<button>Click</button>
<div class="container">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>

当我单击该按钮时,它会无限期地切换框的类名,就好像它不确定是添加还是删除它们一样。是因为 .toggle() 方法在 forEach 循环中吗?

最佳答案

您的问题出在 setInterval 函数中。您是说,每 300 毫秒执行一次此事件。你想要的是 setTimeout,它告诉事件在 300 毫秒后停止。请参阅下面的代码片段,我在其中进行了更改。

查看有关 setTimeout 的更多信息 查看有关 setInterval 的更多信息

var query = document.querySelector.bind(document);

query('button').addEventListener('click', function() {
  [].forEach.call(query('.container').children, function(box, i) {
    setTimeout(function() {
      box.classList.toggle('popIn');
    }, 300 * i);
  })
})
.container > .box {
  width: 100px;
  height: 100px;
  background: cyan;
  display: inline-block;
  transform: scale(0);
  transition: all 0.3s ease-in-out;
}

.container > .box.popIn {
  transform: scale(1);
}
<button>Click</button>
<div class="container">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>

关于javascript - .toggle() 无限且不确定地切换类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44021927/

相关文章:

html - 背景图片不显示在 span 标签中

javascript - 刷新 div(导致浏览重绘它)

javascript - 如何通过单击按钮将示例代码复制到剪贴板中

javascript - 完全使用 iframe 嵌入页面,没有边框,曾经有边框的地方没有空格

java - html 没有出现在 Applet 中

jquery - 检测 jQuery UI slider 何时移动?

javascript - 如何从作为参数传入的嵌套函数访问参数

javascript - 如何通过动态路由匹配捕获更多的路径?

javascript - 使高架 div 标签对劣质 div 不导电

javascript - css/js 将固定元素上的滚动事件委托(delegate)给它们下面的元素