javascript - 是否可以在单击时将类(特别是其动画)重置回其初始状态

标签 javascript css animation css-animations

我有一个动画脚本,它应该根据鼠标事件(如鼠标移动、单击等)更改 div 的动画。一个问题是每次单击 div 时都应该启动动画。

在 Chrome 中,唯一可用于测试的浏览器 *(阅读底部的说明),这不起作用:

//The non-clicked class is "notClicked"
//The clicked class is "clicked"
//The will be referred to as elem
elem.onclick = function(){
  elem.className="notClicked";
  elem.className="clicked";
} 

当该元素被点击一次时,它按预期工作,但如果它被点击两次(触发两个事件)会发生什么:

  • 在元素检查器中,类显示了变化
  • 但是,动画会继续播放,就好像类从未更改过一样,第二个事件也从未触发过。

注意: 不幸的是,我只有一台 chromebook,而且我无法在其他浏览器上进行测试,因为我只有 chrome。我知道我很便宜。对不起。

附加说明:首选原生 javascript,但 jQuery 解决方案也不错。

更多注意事项:为了清楚起见,我认为我让很多人感到困惑,当第二次单击该对象时,动画应该重新开始,而不是继续。

JS FIDDLE(根据要求): that fiddle

最佳答案

您需要在删除类和重新添加类之间使用超时,否则类不存在的时间量太小,浏览器无法注意到差异。

下面是我的意思的一个例子。您将能够看到,每次单击该元素时,它都会返回到其原始状态并且动画会重新开始。

window.onload = function() {
  var el = document.querySelector('div');
  el.addEventListener('click', function() {
    if (this.className == '') { /* for the first click, add class immediately */
      this.className = 'animated';
    } else { /* for second and subequent clicks, first remove class and add after timeout */
      this.className = '';
      window.setTimeout(function() {
        el.className = 'animated';
      }, 100);
    }
  });
}
div {
  height: 200px;
  width: 200px;
  border: 1px solid;
}
.animated {
  animation: zoom 2s linear alternate infinite;
}
@keyframes zoom {
  to {
    transform: scale(1.25);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div>Moving Div!</div>


注意:上面片段中使用的动画只是一个示例。我在看到你的 fiddle 之前创建了它。 Sammy has kindly contributed a fiddle以适应有问题的动画。见 fiddle here .

关于javascript - 是否可以在单击时将类(特别是其动画)重置回其初始状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34976833/

相关文章:

javascript - 使用javascript扩展/缩小图像?

javascript - express get url 错误

javascript - Web Audio API - 奇怪的 5.1 行为

javascript - 在对象定义中访问对象的属性

jquery - 向下滚动时将 div 词缀动画化到顶部

javascript - 容器 div 中的中心 Font Awesome 图标

c# - 按下后退键的动画

javascript - ReactJS 传递回调导致未定义

css - 两个 Div 不会坐在我的灯箱后面

ios - 并行多个快速动画不起作用