首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可行的方法来触发CSS关键帧动画使用JS?

问是否有可行的方法来触发CSS关键帧动画使用JS?
EN

Stack Overflow用户
提问于 2016-07-18 15:29:10
回答 4查看 12.5K关注 0票数 8

当然,我们可以使用关键帧创建一个CSS动画,并从那里控制它。

但是,理想情况下,我想从一个按钮点击触发这个动画-所以按钮单击将是一个事件.

代码语言:javascript
复制
@keyframes fade-in {
    0% {opacity: 0;}
    100% {opacity: 1;}
}

现在,在单击时,我希望触发此动画;而不是从CSS动画属性中触发。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-18 15:52:30

见这里小提琴

如果您希望每次按下该按钮时动画都能工作,请使用以下代码:

代码语言:javascript
复制
$('button').click(function() {
    $(".fademe").addClass('animated');
    setTimeout(function() {
      $(".fademe").removeClass('animated');
    }, 1500);
});

在本例中,1500是animation-duration,1.5s

​

代码语言:javascript
复制
$('button').click(function() {
  $(".fademe").addClass('animated');
  setTimeout(function() {
    $(".fademe").removeClass('animated');
  }, 1500);
});
代码语言:javascript
复制
.fademe {
  width: 100px;
  height: 100px;
  background: red;
}

.fademe.animated {
  animation: fade-in 1.5s ease;
}


@keyframes fade-in {
  0% {
    opacity: 0;
  }

  100% {
    opacity: 1;
  }
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fademe">

</div>

<button>CLICK ME</button>

​

说明:

  1. 单击按钮,将类animated (或任何其他类)添加到要向其应用动画的元素.fademe
  2. 使setTimeout(function()在动画1.5s或1500ms期间延迟removeClass
  3. 用CSS编写动画@keyframes的声明,并通过JQ .fademe.animated添加的类将其添加到元素中。
票数 7
EN

Stack Overflow用户

发布于 2016-07-18 15:41:24

​

代码语言:javascript
复制
$("#move-button").on("click", function(){
  $("#ship").removeClass("moving");
  $("#ship")[0].offsetWidth = $("#ship")[0].offsetWidth;
  $("#ship").addClass("moving");
});//
代码语言:javascript
复制
#ship
{
  background: green;
  color: #fff;
  height: 60px;
  line-height: 60px;
  text-align: center;
  width: 100px;
}

#move-button
{
  margin-top: 20px;
}

#ship.moving
{
  animation: moving 2s ease;
}

@keyframes moving
{
  0%{ transform: translate(0px);}
  50%{ transform: translate(20px);}
  100%{ transform: translate(0px);}
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="ship">Ship</div>
<button id="move-button">Push</button>

​

票数 2
EN

Stack Overflow用户

发布于 2019-10-11 10:27:39

如果您想让动画发生,并且总是在允许事件侦听器再次触发之前结束,我建议您控制这样的行为:

代码语言:javascript
复制
// Add this to your event listener
if (!element.classList.contains("myClass")) {
    element.className = "myClass";
    setTimeout(function() {
        element.classList.remove("myClass");
    }, 1000); //At least the time the animation lasts
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38440634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档