I have tried out the transitionend
and animationend
to change my css after a transition
or keyframes
animation ends. I made an example with both variants and they worked as expected: I can toggle
a class
, when a transition
or animation ends. On hover, I start the transition/animation and in JavaScript
I toggle a class, which changes the background-color
, after the transition/animation changes.
The only difference is, that when I do the mouseout and the div goes back to the original state, with transition
and transitionend, the class will be removed and the original background-color
is visible. For keyframes
animations and animationend
, the class and background-color
stay, also when I do the mouseout. How can I get the same behavoir for the animationend
like the transition
?
var boxTransition = document.getElementById("transition");
var boxAnimation = document.getElementById("animation");
/* add class after transition ends */
boxTransition.addEventListener("transitionend", changeBackground);
/* add class after keyframes animation ends */
boxAnimation.addEventListener("animationend", changeBackground);
function changeBackground() {
this.classList.toggle("box--end");
}
.box {
height: 100px;
margin-bottom: 30px;
width: 100px;
}
.box--transition {
background-color: lightcoral;
transition: width 0.5s ease-in-out;
}
.box--transition:hover {
width: 300px;
}
.box--animation {
background-color: lightblue;
}
.box--animation:hover {
animation: animateWidth 0.5s ease-in-out;
animation-fill-mode: forwards;
}
.box--end {
background-color: gray;
}
@keyframes animateWidth {
from {
width: 100px;
}
to {
width: 300px;
}
}
<div id="transition" class="box box--transition"></div>
<div id="animation" class="box box--animation"></div>