每次用户单击时如何使用按钮启用CSS动画然后重新开始

Posted

技术标签:

【中文标题】每次用户单击时如何使用按钮启用CSS动画然后重新开始【英文标题】:How to enable CSS animation with a button everytime when the user clicks on then it starts over 【发布时间】:2022-01-16 12:03:32 【问题描述】:

我已经知道如何做到这一点只有一次。但我希望当用户再次点击它时,动画会重新开始或重新开始。

我有这个:

function animation() 
  document.getElementById('ExampleButton').className = 'Animation';
.ExampleButtonCSS 
  position: fixed;
  bottom: 113px;
  background: rgba(0, 0, 0, 0);
  color: #cfcfcf;
  width: 100%;
  padding-left: 20px;


#ExampleButton 
  cursor: pointer;
  font-size: 15px;
  outline-color: #000;
  outline-style: auto;
  outline-width: 2px;
  padding: 5px;
  border: none;
  background: rgba(0, 0, 0, 0.25);
  color: #cfcfcf;
  opacity: 0;


.Animation 
  opacity: 0;
  animation: inactivity 5s ease normal;


@keyframes inactivity 
  from 
    opacity: 0;
  
  10% 
    opacity: 1;
  
  90% 
    opacity: 1;
  
  to 
    opacity: 0;
  
<div class="ExampleButtonCSS">
  <button id="ExampleButton" onclick="animation()">Fade in and Out</button>
</div>

那么,如果我点击它,我该怎么做

【问题讨论】:

【参考方案1】:

你需要使用animationend event

<div class="ExampleButtonCSS">
  <button id="ExampleButton"> Fade in and Out </button>
</div>
const explmButton = document.getElementById('ExampleButton')

explmButton.onclick = () =>
  
  explmButton.classList.add('Animation')
  
explmButton.onanimationend = () =>
  
  explmButton.classList.remove('Animation')
  

【讨论】:

谢谢!就是这个!你能告诉我,如果我想要 onkeydown 而不是 onclick 我该如何编码。就像,如果用户按下回车键然后它开始动画?谢谢! @hoaaiww 就是explmButton.onkeydown = (event) =&gt; 请注意 animationend 仅在动画成功完成时触发,如果中止它不会触发,您可能还想监听 animationcancel,或使用 Web Animations API 的 @改为 987654329@。【参考方案2】:

我不完全明白你想要什么。

但您可以在动画完成后重置元素的类。

function animation() 
  document.getElementById('ExampleButton').className = '';
  document.getElementById('ExampleButton').className = 'Animation';
  setTimeout(() => 
    document.getElementById('ExampleButton').className = '';
  , 5000)
.ExampleButtonCSS 
  position: fixed;
  bottom: 113px;
  background: rgba(0, 0, 0, 0);
  color: #cfcfcf;
  width: 100%;
  padding-left: 20px;


#ExampleButton 
  cursor: pointer;
  font-size: 15px;
  outline-color: #000;
  outline-style: auto;
  outline-width: 2px;
  padding: 5px;
  border: none;
  background: rgba(0, 0, 0, 0.25);
  color: #cfcfcf;


.Animation 
  opacity: 0;
  animation: inactivity 5s ease normal;


@keyframes inactivity 
  from 
    opacity: 0;
  
  10% 
    opacity: 1;
  
  90% 
    opacity: 1;
  
  to 
    opacity: 0;
  
<div class="ExampleButtonCSS">
  <button id="ExampleButton" onclick="animation()">Fade in and Out</button>
</div>

【讨论】:

以上是关于每次用户单击时如何使用按钮启用CSS动画然后重新开始的主要内容,如果未能解决你的问题,请参考以下文章

为啥电脑每次开机时都要重新宽带连接?

如何禁用过渡或动画时间的悬停效果,然后在过渡或动画在 css 中完成后启用它?

如何在不使用 void 的情况下重新启动 CSS 动画?

如何在javascript中单击按钮重新加载网页,但在重新加载调用函数后

显示和隐藏 UIView

如何在 js 中的单击事件上添加多个时间动画 css 类?