-
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Lasse Nielsen edited this page Feb 24, 2026
·
4 revisions
LibAnimate is a standalone, LibStub-based animation library for World of Warcraft addons. It provides 77 built-in keyframe-driven animations inspired by animate.css, powered by a single shared OnUpdate driver frame - completely bypassing WoW's buggy Animation/AnimationGroup system.
- 77 built-in animations - Attention seekers, bouncing, fading, sliding, zooming, back, specials, and utility animations
- Keyframe-driven - Define animations as keyframe lists with property values at progress points
- Per-segment easing - Named presets (quadratic, cubic, back) plus full cubic-bezier via Newton-Raphson solver
- Animation delay - Start animations after a configurable delay
- Repeat and loop - Play animations multiple times or loop infinitely
- Animation queues - Chain animations in sequence with per-step callbacks
- Queue looping - Loop entire animation sequences continuously
- Pause and resume - Freeze and resume animations and queues mid-progress
- Dynamic queue management - Insert, remove, and skip queue entries at runtime
- Smooth anchor sliding - Reposition frames smoothly during active animations
-
Extensible - Register your own custom animations via
RegisterAnimation - Lightweight - Single shared driver frame, no per-animation frame overhead
- Multi-version - Supports Retail, TBC Anniversary, and MoP Classic
| Page | Description |
|---|---|
| Getting Started | Installation, dependencies, and your first animation |
| API Reference | Complete documentation for all public methods |
| Animation Catalog | All 77 built-in animations organized by category |
| Custom Animations | How to create and register your own animations |
| Easing Functions | Built-in easing presets and custom cubic-bezier curves |
local LibAnimate = LibStub("LibAnimate")
-- Entrance animation
LibAnimate:Animate(myFrame, "fadeInUp", {
duration = 0.6,
distance = 300,
onFinished = function(frame)
print("Animation complete!")
end,
})
-- Attention seeker (returns to original state)
LibAnimate:Animate(myFrame, "heartBeat")
-- Stop and restore
LibAnimate:Stop(myFrame)
-- Delay + repeat
LibAnimate:Animate(myFrame, "pulse", {
delay = 0.5,
repeatCount = 3,
})
-- Animation queue with looping
LibAnimate:Queue(myFrame, {
{ name = "pulse", duration = 2.0 },
{ name = "heartBeat", duration = 1.3 },
}, { loop = true })
-- Pause / resume
LibAnimate:PauseQueue(myFrame)
LibAnimate:ResumeQueue(myFrame)
-- Dynamic queue management
LibAnimate:InsertQueueEntry(myFrame, { name = "tada" })
LibAnimate:RemoveQueueEntry(myFrame, 2)
LibAnimate:SkipToEntry(myFrame, 1)
-- Smooth anchor repositioning during animation
LibAnimate:SlideAnchor(myFrame, 0, 200, 0.3)LibAnimate animations can interpolate the following frame properties:
| Property | Description | Default |
|---|---|---|
translateX |
Horizontal offset (fraction of distance) | 0 |
translateY |
Vertical offset (fraction of distance) | 0 |
scale |
Uniform scale factor | 1.0 |
alpha |
Opacity (0.0 to 1.0) | 1.0 |
Note: WoW's coordinate system has positive Y pointing up (opposite of CSS). LibAnimate handles this automatically in its built-in animations.