.finish() (since jQuery 1.9) stops the currently-running animation, removes all queued animations, and sets CSS to the end values of every step — current and queued. Returns the jQuery object for chaining.
Remember
$el.finish(); // default queue: "fx"
$el.finish("fx"); // same, explicit
$el.finish("tasks"); // named queue only
// Like .stop(true, true) — PLUS end CSS for queued steps
// Queue is empty afterward
Every queued step also jumps to its end CSS, then the queue is cleared.
Continue with new effects if needed — the pipeline is empty.
Piece
Required?
Role
Matched set
Yes
Elements whose animations should finish
queue
No
Queue name; default "fx"
Return value
—
jQuery object (chainable)
Pseudocode
Pseudocode
call $(elements).finish(queueName?)
queueName = queueName or "fx"
for each matched element:
stop the animation currently running on that queue
set its CSS to that step's end values
for each remaining queued animation on that queue:
set CSS to that step's end values
remove the step from the queue
queue is now empty
return the jQuery set for chaining
Reference
Cheat Sheet
Keep these facts handy when interrupting animation chains.
Topic
Detail
Syntax
.finish([queue])
Since
jQuery 1.9
Default queue
"fx"
vs stop(true, true)
Also applies end CSS for queued steps
vs clearQueue()
clearQueue drops pending only; does not finish CSS
Skip UI
Ideal for “Skip animation” buttons
Related
.stop() · .clearQueue() · .queue()
Try it
Live Preview
Start a three-step chain, then choose finish() or stop(true, true) mid-run.
Box
Chain: margin → opacity → font size. finish() applies all three end values; stop(true,true) only the current step.
Result
Ready — click Go, then finish or stop mid-run.
Code
jQuery Examples
Short, copy-ready snippets. Open DevTools, or use Try It Yourself for a live editor.
Example 1 — Go Then .finish()
Official pattern: chain three .animate() steps, then jump to the combined end state.
Rapid fadeToggle clicks fill the fx queue
finish("fx") resolves every queued fade
Panel ends fully shown or hidden — queue empty
How It Works
Spam. Each click queues another fadeToggle.
Explicit queue."fx" is the default; naming it is clear for teaching.
Resolve. Every queued fade jumps to its end opacity/display.
Clean. The queue is empty for the next intentional animation.
Edge Cases & Pitfalls
Watch these when interrupting multi-step animations.
vs stop
stop(true, true) drops queued end CSS
If later steps must still apply, use .finish() — not .stop(true, true).
instant
Finish jumps — it does not ease
Properties snap to end values. There is no smooth “finish animation.”
queue fn
Custom .queue(fn) entries are processed
Use .clearQueue().finish() when pending callbacks should be discarded.
named
Wrong queue name does nothing useful
Effects live on "fx" by default. Finishing "tasks" won’t touch standard fades.
fx.off
jQuery.fx.off skips tweens globally
When true, animation methods set final state immediately. Pair with reduced-motion prefs.
Compatibility
Browser Support
.finish() has been part of jQuery since 1.9. It works in every browser that runs your loaded jQuery version — no separate browser feature flag.
✓ Stable · jQuery 1.9+
jQuery .finish()
Supported across jQuery 1.9+, 2.x, and 3.x. Prefer a current jQuery 3.x build. Behavior comes from jQuery’s fx queue, not CSS transitions.
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
.finish()Universal
Bottom line: Safe for skip controls and cancel paths. Prefer .finish() when every queued step’s end CSS must apply; use .stop(true, true) when only the current step matters.
Analysis
Performance Notes
Approach
Cost
Best for
.finish() on one element
Cheap
Skip / cancel buttons
Long chains (many steps)
Still cheap vs waiting
Jumping to the end saves time
Spam without finish/stop
Wasted frames
Finish or stop before restarting
Finishing is cheaper than letting a long queue play out. Call it when the user cancels, skips, or navigates away mid-chain — then start fresh effects on an empty queue.
Remember
Key Takeaways
Role: stop current + clear queue + apply end CSS for every step (since 1.9).
vs stop:.finish() also completes queued steps’ end CSS.
Use for: skip controls, cancel mid-chain, settle spam-clicked effects.
One line:.finish() fast-forwards the entire fx playlist to its final frames — current and queued.
Frequently Asked Questions
.finish() stops the currently-running animation, removes all queued animations, and jumps CSS properties to the end values of the current step and every queued step. It returns a jQuery object for chaining.
Both clear the queue and jump the current animation to its end value. .finish() also applies the end CSS of every queued animation before removing those steps. .stop(true, true) discards queued steps without applying their target CSS.
.finish([queue]) accepts an optional string. The default is "fx" — jQuery’s effects queue used by .animate(), .fadeToggle(), and similar methods. Pass a custom name to finish only that named queue.
.finish() was added in jQuery 1.9. Use it on the same fx pipeline as .stop(), .clearQueue(), and .queue().
Yes. Entries still on the fx queue — including custom .queue(fn) callbacks — are processed so each step reaches completion. Use .clearQueue().finish() if you want to drop pending queue items first, then finish only the active animation.
Setting jQuery.fx.off = true disables all effects globally. Animation methods then jump elements to their final state when called, instead of displaying a tween. See jQuery.fx.off for details.