fadeOut, fadeIn jQuery-style
Time for another in my series of occasional posts over-explaining simple programming tasks that took me longer to figure out than they should have.
Let’s say you’re writing a bit of JavaScript and want to fade the text of a component out, change the text, and fade it in. Assume you’re using jQuery to handle the fades. Assume that the component has an ID of “fader” and you want its initial text of “First” to be replaced by the text “Second.” Ok?
Here’s the simple HTML:
<div id="fader">First</div>
With jQuery, you fade an element out by first selecting the particular element. which you can do by putting its ID in quotes and prefixing it with a #: $("#fader")
. Then you tell that element what method you want to execute, which in this case is the jQuery “fadeOut” command, with a duration expressed in microsecondsmilliseconds. Put ’em together and you get the simple-but-powerful jQuery statement: $("#fader").fadeOut(500);
. Likewise for the fadeIn
command.
If you’re me, the first thing you’ll try will be:
1 |
function fadeMe(){ |
2 |
$(“#fader”).fadeOut(500); |
3 |
$(“#fader”).text(“Second”); |
4 |
$(“#fader”).fadeIn(500); |
5 |
} |
Click here to give it a try on the following sample text:
That’s not right. At least in my browser (Chrome). Instead of fading out “First” and fading in “Second,” the word “Second” fades out and then in. Presumably that’s because Javascript isn’t waiting for jQuery to complete the fadeout before moving to the instruction to substitute “Second” for “First” as the element’s text.
So here’s a way that works. (Note that I’m not saying it’s the best or right way. If it’s worse than that, if it’s actually the wrong way, please leave a comment and I’ll link to it at the top of his post. Thanks!)
1 |
function fadeMe(){ |
2 |
$(“#fader”).fadeOut(500, function(){ |
3 |
$(“#fader”).text(“Second”); |
4 |
$(“#fader”).fadeIn(500); |
5 |
}); |
6 |
} |
Click here to to try it on the text below:
The difference is that the second way adds a function to the jQuery’s fadeOut command that is invoked only after the fadeOut is completed. That function changes the text of the element and fades it in.
(Click here to reset both examples.)
(PS: I created the tables for the code by pasting it in here.)