Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Is there a better way to have Javascript function wait until transition is finished than just setting `setTimeout()` to same as transition-duration?

I’m using Javascript to style a <span> tag (that is already styled in CSS to be cyan) to turn green when it is clicked, and then right back to cyan. In the CSS, its transition-duration property is set to 100ms. I don’t want Javascript to set the color back to cyan before it’s finished changing to green, so naturally, I use a setTimeout() to delay it the amount of time that the transition will take (100ms), as you can see in the code below, and I improved it a little after looking at other questions regarding this, but they still didn’t seem to be the most efficient.

document.getElementById("text").addEventListener("click", function() {
  document.getElementById("text").style.color = "Green";
  setTimeout(function() {
    document.getElementById("text").style.color = "Cyan";
  }, 100); // Timeout time same as transition-duration.
});
#info-display {
  user-select: none;
  text-align: center;
  font: small-caps bold 1.6vw 'Courier New', Courier, monospace;
}

#text {
  color: Cyan;
  background-color: Black;
  padding: 0.1vw 1vw 0.1vw;
  border-radius: 25% 25% 15% 15%;
  transition-duration: 100ms;
}
<h1 id="info-display"><span id="text">~ Words to Click. ~</span></h1>

I need to know if there is a better way than this; some way that Javascript can detect when a CSS transition has finished, so that the tedious work of changing the transition time in two places does not have to happen.

If anybody can help me find a way, it would be fantastic! 😃

Thanks!

P.S. Please don’t bother asking, "Why an <h1> tag?" or anything like that, it’s just what I’m using in the full program that this is for.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

Yes, there is. Take a look at the following EventListener:

elem.addEventListener('transitionend', function(){
    //Do something
});
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading