I want to rotate element onclick by adding CSS class to it. Problem is, when that same CSS class is removed, element is rotated for the second time.
fiddle: https://jsfiddle.net/L3x2zhd1/1/
JS:
var el = document.getElementById('el');
el.onclick = function() {
    el.className = 'rotate'
    setTimeout(function(){
    el.className = ''
    },1000)
};
CSS:
#el {
    width: 50px;
    height: 50px;
    background-color: red;
    -webkit-transition: -webkit-transform 1s;
    transition: transform 1s;
}
.rotate {
    -webkit-transform: rotate(180deg);
  transform: rotateX(180deg);
}
How can I avoid this?
You'll want to place the transition: transform 1s (and related vendor prefixes) on the .rotate css rule:
Reason for double animation:
You had defined the transition property on the root element. As a result when it was trying to come to its normal position, it was again rotating due to transition.
var el = document.getElementById("el");
el.addEventListener("click", function() {
  el.classList.add("rotate");
  setTimeout(function() {
    el.classList.remove("rotate");
  }, 1000);
});
#el {
  width: 50px;
  height: 50px;
  background-color: red;
  color: white;
  font-weight: bold;
  text-align: center;
}
.rotate {
  -webkit-transition: -webkit-transform 1s;
  transition: transform 1s;
  -webkit-transform: rotateX(180deg);
  transform: rotateX(180deg);
}
<div id="el">test</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With