jQuery finish() vs stop(): Key Differences
In jQuery, managing animated elements requires precise control over
how animations halt and transition. Both the stop() and
finish() methods are designed to cancel running animations,
but they behave very differently regarding queued actions and final CSS
property values. While stop() allows you to pause or
discard animations at their current or immediate end state,
finish() forces all current and queued animations to
instantly jump to their final target values.
The jQuery stop() Method
The stop() method halts the currently executing
animation on the selected element. By default, it stops the animation
wherever it currently is in its execution timeline, leaving the CSS
properties in their intermediate states, and immediately proceeds to the
next animation in the queue.
The syntax for stop() accepts two optional boolean
parameters:
$(selector).stop([clearQueue], [jumpToEnd]);clearQueue(default:false): If set totrue, it empties the animation queue, preventing any subsequent animations from running.jumpToEnd(default:false): If set totrue, it forces the current animation to immediately complete to its final CSS values instead of freezing midway.
Common variations include:
$(selector).stop(): Stops the current animation in place; queued animations continue.$(selector).stop(true): Stops the current animation in place; clears all queued animations.$(selector).stop(true, true): Snaps the current animation to its end values; clears the remaining queued animations without applying their final values.
The jQuery finish() Method
Introduced in jQuery 1.9, the finish() method stops the
currently running animation, clears the animation queue, and causes the
CSS properties for all animations (both the current one
and all queued ones) to instantly jump to their final target values.
The syntax for finish() is:
$(selector).finish([queue]);queue(default:'fx'): The name of the animation queue to finish.
Unlike stop(true, true), which discards the remaining
animations entirely, finish() ensures that the final state
of the entire animation sequence is reached immediately.
Direct Comparison
| Feature | stop() (Default) |
stop(true, true) |
finish() |
|---|---|---|---|
| Current Animation | Freezes at current position | Jumps to end value | Jumps to end value |
| Queued Animations | Starts the next animation | Discarded entirely | Resolved to their final end values |
| Final Visual State | Partial/incomplete | Only first animation finishes | Complete sequence finishes |
Practical Example
Consider an element with three chained animations:
$("#box")
.animate({ opacity: 0.5 }, 1000)
.animate({ width: "300px" }, 1000)
.animate({ height: "300px" }, 1000);If you trigger an action midway through the first animation:
$("#box").stop()freezes the opacity wherever it was and immediately starts animating the width.$("#box").stop(true, true)sets opacity to0.5instantly and cancels both the width and height animations entirely.$("#box").finish()sets the opacity to0.5, the width to300px, and the height to300pxall at once, achieving the intended final design immediately.