jQuery API

.fadeToggle()

.fadeToggle( [duration] [, easing] [, callback] ) Returns: jQuery

Description: Display or hide the matched elements by animating their opacity.

  • version added: 1.4.4.fadeToggle( [duration] [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

The .fadeToggle() method animates the opacity of the matched elements. When called on a visible element, the element's display style property is set to none once the opacity reaches 0, so the element no longer affects the layout of the page.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively.

Easing

The string representing an easing function specifies the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

Callback Function

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

As of jQuery 1.6, the .promise() method can be used in conjunction with the deferred.done() method to execute a single callback for the animation as a whole when all matching elements have completed their animations ( See the example for .promise() ).

Additional Notes:

  • All jQuery effects, including .fadeToggle(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.
  • Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

Example:

Fades first paragraph in or out, completing the animation within 600 milliseconds and using a linear easing. Fades last paragraph in or out for 200 milliseconds, inserting a "finished" message upon completion.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  
<button>fadeToggle p1</button>
<button>fadeToggle p2</button>
<p>This paragraph has a slow, linear fade.</p>

<p>This paragraph has a fast animation.</p>
<div id="log"></div>

<script>
$("button:first").click(function() {
  $("p:first").fadeToggle("slow", "linear");
});
$("button:last").click(function () {
  $("p:last").fadeToggle("fast", function () {
    $("#log").append("<div>finished</div>");
  });
});
</script>

</body>
</html>

Demo:

Support and Contributions

Need help with .fadeToggle() or have a question about it? Visit the jQuery Forum or the #jquery channel on irc.freenode.net.

Think you've discovered a jQuery bug related to .fadeToggle()? Report it to the jQuery core team.

Found a problem with this documentation? Report it to the jQuery API team.

* All fields are required
  • http://sublee.kr/ Heungsub Lee

    Does this demo work in Google Chrome(7.0.517.44)?

    I got this error message:

    Uncaught TypeError: Object #<an object> has no method 'fadeToggle'
  • beowulf

    error? hm… welldone at my Chrome and same version 7.0.517.44

  • http://sublee.kr/ Heungsub Lee

    The error is gone now! I guess my problem is the browser's caching.

  • Victor Stan

    Does it work in FF4? Can't see the examples doing anything…

  • http://sublee.kr/ Heungsub Lee

    I had kind of same problem. My problem was just the browser's caching. I'm sure the problem will be gone shortly.

  • http://www.bionicworks.com wavyGravy

    I had to clear my cache but it farted out in FF 3.6 for some reason.

  • JqueryFan

    I´ve FF 3.6, I deletet my Cache, but it still doesn´t work
    Some Ideas?

  • JqueryFan

    I forgote, my Firebug shows following message.

    $(“p:first”).fadeToggle is not a function

  • Tony

    Demo fails in IE7.

  • http://twitter.com/vitorgga VitorGGA

    Bad bad, don't function.

  • dmackerman

    Demo doesn't even work. If you're going to put something up as a demo, at least test it? Jeez.

  • http://www.learningjquery.com/ Karl Swedberg

    Sorry, everyone! If the demo was broken for you before, please try again. The problem was most likely due to the browser caching an older version of jQuery. I've updated the demo to explicitly point to jQuery 1.4.4, so it should work now.

  • Hellokelon

    wow . I like Jq very much,haha thank you .

  • DanW

    This doesn't seem to work with a group of mixed opacity items. I'm trying to toggle 6 different items, some with opacity 0 and other with opacity 1 to create a nice cross fade. All the items seem to just fade out in this version, albeit I'm new to JQ so I could be doing something (or many things) quite wrong.

  • http://www.learningjquery.com/ Karl Swedberg

    .fadeToggle() works on the same principle as .fadeOut() and .fadeIn(). Like .fadeOut(), .fadeToggle() will fade elements out if they are visible; like fadeIn(), it will fade elements in if they are hidden. Even if an element begins with opacity 0, if it takes up space in the document (i.e. it has a height or width), it isn't considered hidden. The same is true for an element with visibility: hidden. You can use .fadeTo() or .animate() to fade an element from one opacity to another without affecting its display property. If you do that, however, an element that initially has display: none won't become visible just because you're animating the opacity. Hope that helps.

  • http://twitter.com/tehnolog Alexander Klimoff

    don't work correctly for me in IE9 for second click. When I make second click text appear and dissappear again (first button). Second button works without problem and text not disappear. In Google Chrome works very nice.

  • http://twitter.com/tehnolog Alexander Klimoff

    I make tutorial in CHM-format and в CHM (IE6 Engine) script works correct.

  • http://twitter.com/tehnolog Alexander Klimoff

    I make tutorial in CHM-format and в CHM (IE6 Engine) script works correct.

  • http://www.learningjquery.com/ Karl Swedberg

    It's my understanding that jQuery does not suport beta versions of browsers. Nevertheless, if you want to raise this issue, please do so on the forum or the bug tracker. Also, please provide a reduced test case on jsfiddle.net so people can see the problem for themselves.

  • Josephricklefs

    It doesn’t work properly in Firefox 3.6.12.1 either

  • http://www.learningjquery.com/ Karl Swedberg

    please see my above comment about reporting such issues on the bug tracker rather than here. thanks.

  • http://www.learningjquery.com/ Karl Swedberg

    can you please post your comment at http://forum.jquery.com/ ? Thanks.

  • Fghfghfghfghfgh

    fgh

  • Dsa

    fdsa

  • http://hyponiq.myopenid.com/ Leon Sutton

    This is definitely a nice addition to the animation core.

  • Guest

    Is there a possiblity to check if the element was faded in or out ?

  • http://twitter.com/sonnysavage Sonny Savage

    It would be nice if .fadeToggle() also allowed the boolean 'showOrHide' argument like .toggle() – http://api.jquery.com/toggle/

  • http://www.jebaird.com/ jebaird

    You could check to see if the element is visible because the fade in/out is just animating the opacity and changing the target element's display

    $('div').is(':visible')