【问题标题】:How to trigger CSS animation [duplicate]如何触发CSS动画[重复]
【发布时间】:2019-01-03 21:00:53
【问题描述】:

我是 CSS 新手,但知道基础知识,我想使用按钮触发此动画。我无法让它工作。

我在 Stackoverflow、Jquery、Jscript 中使用了几个示例,但似乎都没有提到 @keyframes。

我看到了更多关于通过类和删除类引用动画的信息(据我了解,这种方式是通过删除元素来重新启动动画)。我尝试将其切换到类。

我也想知道什么是最佳实践?

最好的方法是什么?我以为会很简单,但我错了.....

我有这样的 CSS:

#test {
margin-left: 20px;
margin-top: 20px;
width: 50px;
height: 0px;
background: maroon;
position: absolute;
animation-name: example;
animation-duration: 3s;
animation-fill-mode: forwards;
animation-delay: 0s;

}
 @keyframes example {
 from { transform: translateY(200px)}
  to {height: 200px; background-color: teal;}
}

【问题讨论】:

  • 请在您的问题(包括 HTML)中添加minimal reproducible example - 否则很难准确地告诉问题出在哪里。
  • 基本上这就是所有的代码了,它引用了一个id为test的div。我想让它在点击时运行的动画。
  • 但是divbutton 在哪里?你有什么错误吗?所有这些因素都会发挥作用
  • 我删除了它,我似乎无法让它工作。这就是为什么我只展示了 CSS。下面的答案似乎在这里工作!所以我尝试这个!但我做错了什么
  • 没错!如果您删除了您所做的事情,我们将如何帮助您修复它?我们只能猜测此时答案可能是什么样子,但无法真正告诉您为什么您的代码无法正常工作

标签: javascript jquery css animation css-animations


【解决方案1】:

我无法重现您使用 CSS 描述的问题。

请参阅下面的示例:

使用mcve 编辑问题后,此答案将被删除。

请注意

如果您的问题是关于最佳实践,那么对于 StackOverflow 来说,这将是题外话。请参阅我们的how to ask 页面

$(function() {
  $("#test-btn").on('click', function() {
    $("#test").addClass('animation');
  });
});
.animation {
  margin-left: 20px;
  margin-top: 20px;
  width: 50px;
  height: 0px;
  background: maroon;
  position: absolute;
  animation-name: example;
  animation-duration: 3s;
  animation-fill-mode: forwards;
  animation-delay: 0s;
}

@keyframes example {
  from {
    transform: translateY(200px)
  }
  to {
    height: 200px;
    background-color: teal;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button id="test-btn">Animate</button>
<hr/>
<div id="test"></div>

【讨论】:

  • 感谢 Jquery 版的回答。我从中学到了很多东西。但我显然犯了一个错误?我应该发布所有内容?我以为我做对了。但之前评论者已经提到我应该发布 html。问题是,它只是一个 div 和一个按钮,不再引用代码。
  • 哦,你也是 :)
  • @Codelly 的想法是发布重现问题所需的最少代码。欢迎来到 StackOverflow!我很高兴这两个答案都有帮助
  • 好的,下次再做!非常感谢!
  • @Codelly 欢迎您。很高兴我能帮上忙
【解决方案2】:

如果你决定废弃 jQuery(或者你必须在没有它的情况下工作),以便在你的 #test 元素上切换 CSS 动画使用原生 JavaScript , 将动画相关的 CSS 属性分离到一个类中:

.animate {
  animation-name: example;
  animation-duration: 3s;
  animation-fill-mode: forwards;
  animation-delay: 0s;
}

然后在#test 元素上切换(添加/删除) .animate 类:

button.addEventListener('click', function() {
  if (isAnimating) {
    element.classList.remove('animate');
    button.innerHTML = 'Add animation';
  } else {
    element.classList.add('animate');
    button.innerHTML = 'Remove animation';
  }

  isAnimating = !isAnimating;
});

var element = document.getElementById('test');
var button = document.getElementById('toggle');
var isAnimating = false;

button.addEventListener('click', function() {
  if (isAnimating) {
    element.classList.remove('animate');
    button.innerHTML = 'Add animation';
  } else {
    element.classList.add('animate');
    button.innerHTML = 'Remove animation';
  }
  
  isAnimating = !isAnimating;
});
#test {
  margin-left: 20px;
  margin-top: 20px;
  width: 50px;
  height: 0px;
  background: maroon;
  position: absolute;  
}

.animate {
  animation-name: example;
  animation-duration: 3s;
  animation-fill-mode: forwards;
  animation-delay: 0s;
}

#toggle {
  margin-left: 100px;
}

@keyframes example {
  from {
    transform: translateY(200px)
  }
  to {
    height: 200px;
    background-color: teal;
  }
}
<div id="test"></div>
<button id="toggle">Add animation</button>

【讨论】:

  • 谢谢你的解释很清楚,我也会学习它的Jquery版本。我现在正在尝试。我这边似乎有一些问题。但它在网站上有效。我一定是做错了什么。
  • 不客气!如果您还有其他问题,请在 SO 上发布,但请遵守有关 MCVE 的规则。 ;)
  • 谢谢!!!我不得不把它放在代码周围:window.onload=function(){ 你提供的代码} 因为它给了我无法读取 null 的属性“addEventListener”。我没有听说过 Vanilla Jscript,我认为它不是最好的方法 :) 但是很高兴看到它起作用。我现在将改进代码!
  • 继续努力@Codelly!
猜你喜欢
  • 2018-07-28
  • 2020-07-24
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多