jQuery API

.fadeTo()

.fadeTo( duration,opacity, [callback] ) Returns: jQuery

Description: Adjust the opacity of the matched elements.

  • version added: 1.0.fadeTo( duration, opacity, [callback] )

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

    opacityA number between 0 and 1 denoting the target opacity.

    callbackA function to call once the animation is complete.

  • version added: 1.4.3.fadeTo( duration, opacity, [easing], [callback] )

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

    opacityA number between 0 and 1 denoting the target opacity.

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

    callbackA function to call once the animation is complete.

The .fadeTo() method animates the opacity of the matched elements.

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. If any other string is supplied, the default duration of 400 milliseconds is used. Unlike the other effect methods, .fadeTo() requires that duration be explicitly specified.

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.

We can animate any element, such as a simple image:

<div id="clickme">
    Click here
  </div>
  <img id="book" src="book.png" alt="" width="100" height="123" />
  With the element initially shown, we can dim it slowly:
  $('#clickme').click(function() {
    $('#book').fadeTo('slow', 0.5, function() {
      // Animation complete.
    });
  });
  

With duration set to 0, this method just changes the opacity CSS property, so .fadeTo(0, opacity) is the same as .css('opacity', opacity).

Additional Notes:

  • All jQuery effects, including .fadeTo(), 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.

Examples:

Example: Animates first paragraph to fade to an opacity of 0.33 (33%, about one third visible), completing the animation within 600 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <p>
Click this paragraph to see it fade.
</p>

<p>
Compare to this one that won't fade.
</p>
<script>
$("p:first").click(function () {
$(this).fadeTo("slow", 0.33);
});
</script>

</body>
</html>

Demo:

Example: Fade div to a random opacity on each click, completing the animation within 200 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <style>
p { width:80px; margin:0; padding:5px; }
div { width:40px; height:40px; position:absolute; }
div#one { top:0; left:0; background:#f00; }
div#two { top:20px; left:20px; background:#0f0; }
div#three { top:40px; left:40px; background:#00f; }
</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <p>And this is the library that John built...</p>

<div id="one"></div>
<div id="two"></div>
<div id="three"></div>
<script>
$("div").click(function () {
$(this).fadeTo("fast", Math.random());
});
</script>

</body>
</html>

Demo:

Example: Find the right answer! The fade will take 250 milliseconds and change various styles when it completes.

<!DOCTYPE html>
<html>
<head>
  <style>
div, p { width:80px; height:40px; top:0; margin:0; 
position:absolute; padding-top:8px; }
p { background:#fcc; text-align:center; }
div { background:blue; }
</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <p>Wrong</p>
<div></div>
<p>Wrong</p>
<div></div>

<p>Right!</p>
<div></div>
<script>
var getPos = function (n) {
return (Math.floor(n) * 90) + "px";
};
$("p").each(function (n) {
var r = Math.floor(Math.random() * 3);
var tmp = $(this).text();
$(this).text($("p:eq(" + r + ")").text());
$("p:eq(" + r + ")").text(tmp);
$(this).css("left", getPos(n));
});
$("div").each(function (n) {
      $(this).css("left", getPos(n));
    })
.css("cursor", "pointer")
.click(function () {
      $(this).fadeTo(250, 0.25, function () {
            $(this).css("cursor", "")
                   .prev().css({"font-weight": "bolder",
                                "font-style": "italic"});
          });
    });

</script>

</body>
</html>

Demo:

Support and Contributions

Need help with .fadeTo() 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 .fadeTo()? Report it to the jQuery core team.

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

* All fields are required
  • https://me.yahoo.com/a/OK1tNaZulJxN5dbQNLz1SiVihbNgUl_IlEFkow--#9c738 George Edison

    Doesn’t work very well with tr elements in IE. See http://stackoverflow.com/questions/2437026/why-cant-i-fade-out-this-table-row-in-ie-using-jquery for more info.

  • http://www.digitalwarfare247.com Neejoh

    Just to note, I was having trouble with fadeTo() in IE (7 and 8) because the element had a class “position: absolute”. It did not fade down at all but it did give the callback for complete. When I set the “position” to “static” fixed the fading (but giving me a new set of problems.. *shoots at IE*).

  • http://digitalbarn.tv jeremyBass

    @Neejoh did you file a bug report.. Do the dev know that fadeto breaks on position: absolute in IE in reference to the alpha? I think that is major in relative terms to its function.. That one bug limits the usage of fadeto to like useless in most things if you want true cross browser.. :/ It worked other then the black halo… and I know that can be sorted tons of examples on the net.. and I believe from reading that was suppost to be sorted already… but at the lease I can confirm the issue.

  • http://digitalbarn.tv jeremyBass

    @Neejoh did you file a bug report.. Do the dev know that fadeto breaks on position: absolute in IE in reference to the alpha? I think that is major in relative terms to its function.. That one bug limits the usage of fadeto to like useless in most things if you want true cross browser.. :/ It worked other then the black halo… and I know that can be sorted tons of examples on the net.. and I believe from reading that was suppost to be sorted already… but at the lease I can confirm the issue.

  • GJ

    Fading images:
    - Works great in Firefox 3.6.x and Chrome 4.x
    - The fade effect doesn't work in IE, only the callback function
    - Works terrible with Opera 10, it cuts in a half the images
    - Works not properly with Safari 4, it fade the wrong image !!

  • Laurence Lord

    I'm having trouble interrupting a FadeTo with another FadeTo. i.e. a background image that is fading slowly in and out that I want to interrupt by quickly fading out when a link is clicked. If there is a simple command to stop the FadeTo effect should it be mentioned here?

  • Laurence Lord

    I have found stop() now which is of course the effect I was looking for.

    Thanks.

  • Matt

    Fails in IE. A lot.

  • Kieran

    Cant seem to make this work in a list item in ie8.
    works fine in ie 7 though.
    Any thoughts?

  • Stev

    I found in the MSDN library that opacity can be handled as follows under IE >= 5.5

    // opacity transition
    // Duration = sec.ms, Overlap= 0.0->1.0 (see link below), Percent = 'stop opacity'
    $('div#overlay').css('filter',”progid:DXImageTransform.Microsoft.Fade(Duration=0.600, Overlap=1.0, Percent=60)”);

    // Direct setter
    // Opacity = perccentage
    $('div#overlay').css('filter',”progid:DXImageTransform.Microsoft.Alpha(Opacity=60)”);

    For more infos check :
    http://msdn.microsoft.com/en-us/library/ms532990%28VS.85%29.aspx

  • Guest

    I have this problem in Chrome…

  • http://twitter.com/HammyNZ Hamish Rouse

    I had a similar issue. I was targeting an inline anchor element to fadeTo on hover. I had to add display:block in css to make fadeIn work in IE8 and Chrome.

    Neejoh mentioned changing position:relative to static (tho this didn't work for me it might work in another scenario)

  • Itgenesys

    I am new to Jquery !!
    I have applied fadeTo effect to one image and it is working fine but when my mouse is out from the image I want my image to come back to its original condition.
    By the way I have applied on anchor tag like
    $(document).ready(function(){

    $(“a”).hover(function(){
    $(this).fadeTo(“slow”,0.55);
    });
    });

    Please help !!
    Noddy

  • Itgenesys

    I am new to Jquery !!
    I have applied fadeTo effect to one image and it is working fine but when my mouse is out from the image I want my image to come back to its original condition.
    By the way I have applied on anchor tag like
    $(document).ready(function(){

    $(“a”).hover(function(){
    $(this).fadeTo(“slow”,0.55);
    });
    });

    Please help !!
    Noddy

  • http://twitter.com/brend0 Brendan Abbott

    This issue is still current AFAIK

  • http://www.vacant-nebula.com/ kip

    The documentation for the second version, added in jQuery 1.4.3, makes it look like duration can be ommitted, but this is not the case.

  • Wyl_616

    I have a little issue,why the code about jquery can not run at ie8.0

  • Jeko

    i found solution here for inline IE8 elements
    http://www.devcomments.com/IE-…

    Hi,

    I just wanted to report a small bug with fadeTo method in Internet Explorer 8. It won't work if your element as “display” set to “inline”. I found that you need to put it to “inline-block” and then it works perfectly. There is nothing about this on the web and it's not the first time I have this problem.

  • Jeko

    i found solution here for inline IE8 elements
    http://www.devcomments.com/IE-…

    Hi,

    I just wanted to report a small bug with fadeTo method in Internet Explorer 8. It won't work if your element as “display” set to “inline”. I found that you need to put it to “inline-block” and then it works perfectly. There is nothing about this on the web and it's not the first time I have this problem.

  • Kelvne

    Doesn't working on chrome if you calls a function before like:
    $(“#div”).fadeTo('1000', 0.8, function(){
    // Commands
    })

  • Orrin Ward

    Your selector should not have a hash.

    $('div')….
    Use hash if you are targeting something by ID.

    <div id=”thisdiv”></div> would be called using $('#thisdiv')