Is There A Feasible Way To Trigger Css Keyframe Animation Using Js?
Naturally, we can create a CSS animation using keyframes, and control it from there. However, ideally, I would like to trigger this animation from a button click - so the button cl
Solution 1:
see here jsfiddle
if you want your animation to work every time you press the button use this code :
$('button').click(function() {
    $(".fademe").addClass('animated');
    setTimeout(function() {
      $(".fademe").removeClass('animated');
    }, 1500);
});
where 1500 is the animation-duration in this case, 1.5s
$('button').click(function() {
  $(".fademe").addClass('animated');
  setTimeout(function() {
    $(".fademe").removeClass('animated');
  }, 1500);
});.fademe {
  width: 100px;
  height: 100px;
  background: red;
}
.fademe.animated {
  animation: fade-in 1.5s ease;
}
@keyframes fade-in {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><divclass="fademe"></div><button>CLICK ME</button>EXPLANATION :
- on click on the button add class animated( or any other class ) to the element you want to apply the animation to ,.fademe
- make a setTimeout(function()to delay theremoveClassfor the duration of the animation1.5sor1500ms
- write in CSS the declaration of the animation , @keyframes, and add it to the element with the class added by the JQ.fademe.animated
Solution 2:
$("#move-button").on("click", function(){
  $("#ship").removeClass("moving");
  $("#ship")[0].offsetWidth = $("#ship")[0].offsetWidth;
  $("#ship").addClass("moving");
});//#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);}
}<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script><divid="ship">Ship</div><buttonid="move-button">Push</button>Solution 3:
If you want to make the animation happen and always end before allowing the event listener to trigger it again, I would suggest to control the behaviour like this:
// Add this to your event listenerif (!element.classList.contains("myClass")) {
    element.className = "myClass";
    setTimeout(function() {
        element.classList.remove("myClass");
    }, 1000); //At least the time the animation lasts
}
Solution 4:
There is a toggle method that works just fine for this, hope it helps:
functionFade() {
  document.getElementById("box").classList.toggle("animate");
}#box {
  background-color: black;
  height: 50px;
  width: 50px;
}
.animate {
  animation: fademe 0.5s;
}
@keyframes fademe {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}<html><head><title>
    Animation Trigger
  </title></head><body><divid="box"></div><buttononclick="Fade()"> Fade above Box</button></body>
Post a Comment for "Is There A Feasible Way To Trigger Css Keyframe Animation Using Js?"