.fadeIn() (since jQuery 1.0) displays matched elements by fading them to opaque (opacity 1). It unhides the element and animates opacity. Returns the jQuery object for chaining.
Remember
$("#book").fadeIn(); // default 400 ms
$("#book").fadeIn("slow", function () { /* done */ });
$("#panel").fadeIn(600, "linear");
// Unhides + fades to opacity 1
// Unlike .fadeTo() — that does not unhide
Hide the element first (or start with display: none), then call .fadeIn() from a click or other handler.
Select the target ($("#book")).
Ensure it is hidden (.hide() or CSS display: none).
On a user action, call .fadeIn() (optional duration / easing / complete).
jQuery restores display and animates opacity to 1.
For spam clicks, chain .stop(true, true) before .fadeIn().
Piece
Required?
Role
Matched set
Yes
Hidden elements to reveal
duration
No
Default 400; also "fast" (200) / "slow" (600)
easing
No
Default "swing"; built-in also "linear" (since 1.4.3)
complete
No
Runs once per matched element when its fade ends
Return value
—
jQuery object (chainable)
Pseudocode
Pseudocode
call $(elements).fadeIn(duration?, easing?, complete?)
for each matched element:
restore a visible display value
animate opacity → 1 over duration
if complete was provided:
call complete once for this element
(this = the DOM element)
return the jQuery set for chaining
Reference
Cheat Sheet
Keep these facts handy while building fade reveals.
Topic
Detail
Syntax
.fadeIn([duration] [, easing] [, complete])
Options form
.fadeIn({ duration, easing, complete, … })
Since
jQuery 1.0 · easing arg since 1.4.3
Default duration
400 ms
Presets
"fast" = 200 · "slow" = 600
Easing
swing (default) · linear
Callback
Once per element · use .promise() for “all done”
vs fadeTo
.fadeIn() unhides · .fadeTo() does not
Rapid clicks
$el.stop(true, true).fadeIn()
Try it
Live Preview
Click Run to fadeIn the sample panel. Change duration with the chips.
This paragraph fades in with .fadeIn().
Reset hides the panel so you can fade it in again. Each Run starts from hidden.
Result
Ready — click Run to fadeIn.
Code
jQuery Examples
Short, copy-ready snippets. Open DevTools, or use Try It Yourself for a live editor.
Example 1 — Basic Slow Reveal
From the jQuery docs: fade in a hidden element on click with a complete callback.
jQuery
$("#clickme").on("click", function () {
$("#book").fadeIn("slow", function () {
// Animation complete
});
});
hide() → display:none instantly
fadeIn(800) → smooth reveal
Status updates when complete
How It Works
hide. Instant hide resets to a known start state.
fadeIn. Animates opacity up over 800 ms.
Repeatable. Works even if the alert was already visible.
Callback. Updates status when the fade ends.
Example 5 — Linear Easing + Callback
Positional easing since jQuery 1.4.3 — constant-speed fade with a complete handler.
jQuery
$("#run").on("click", function () {
$("#panel").hide();
$("#panel").fadeIn(600, "linear", function () {
$("#status").text("Complete — callback fired once per element.");
});
});
.fadeIn() has been part of jQuery since 1.0 (easing argument since 1.4.3). It works in every browser that runs your loaded jQuery version.
✓ Stable · jQuery 1.0+
jQuery .fadeIn()
Supported across jQuery 1.x, 2.x, and 3.x. Prefer a current jQuery 3.x build. Start from a hidden element for a clear reveal.
100%With jQuery
Google ChromeAll versions · Desktop & Mobile
Full support
Mozilla FirefoxAll versions · Desktop & Mobile
Full support
Apple SafariAll versions · macOS & iOS
Full support
Microsoft EdgeAll versions · Chromium & Legacy
Full support
Internet ExplorerIE 6+ · Legacy environments
Full support
OperaAll modern versions
Full support
.fadeIn()Universal
Bottom line: Safe for everyday UI reveals. Guard rapid clicks with .stop(true, true), and respect jQuery.fx.off for reduced motion.
Analysis
Performance Notes
Approach
Cost
Best for
One element fadeIn
Cheap
Panels, alerts, help boxes
Many elements at once
More paint work
Keep sets small; prefer one container
Queued spam clicks
Wasted frames
Always .stop(true, true) on busy buttons
Opacity fades are inexpensive for a few elements. Cost climbs with large sets or stacked queues — stop before fade, and prefer fading one wrapper over dozens of children.
Guard:.stop(true, true) before fade on busy buttons.
One line:.fadeIn() reveals a hidden element by fading opacity to 1 — the smooth counterpart to .show().
Frequently Asked Questions
.fadeIn() displays matched elements by fading them to full opacity. It animates opacity toward 1 and restores a visible display value so hidden content becomes visible. Use it for a smooth reveal instead of an instant .show().
1) .fadeIn([duration] [, complete]) — optional duration and completion callback. 2) .fadeIn(options) — an options object with duration, easing, queue, step, progress, and Promise-style callbacks. 3) .fadeIn([duration] [, easing] [, complete]) — positional easing since jQuery 1.4.3.
.show() reveals instantly with no transition. .fadeTo() animates to a target opacity but does not unhide elements. .fadeOut() hides by fading to 0. .fadeIn() both unhides and fades to full opacity in one call.
Duration is in milliseconds. Default is 400 ms when omitted. The strings "fast" (200 ms) and "slow" (600 ms) map to preset speeds, the same as other jQuery effect methods.
Once per matched element when that element’s fade finishes — not once for the whole set. Inside the callback, this is the DOM element. Use .promise().done() when you need a single callback after every element completes.
Yes for a visible effect. .fadeIn() is meant for hidden elements (typically display:none via .hide()). Calling it on already-visible, fully opaque elements has little noticeable effect.