svelte-animate
v0.6.2
Published
A lightweight Svelte component that adds beautiful CSS animations to any element using Animate.css library. Features include click/hover triggers, customizable duration, reduced motion support, and accessibility features. Perfect for creating engaging use
Maintainers
Readme
Svelte-Animate
Svelte Animate is a lightweight, accessible Svelte component that wraps Animate.css, simplifying animation integration in Svelte applications. It offers advanced features like: Sequential animation effects, Configurable trigger modes (hover, click, auto), Accessibility-first design, Reduced motion support, Flexible repeat and timing controls. Designed for Svelte's latest features, it provides more sophisticated animation capabilities than standard Svelte transitions.
Feature Details
- 🎯 Easy to use wrapper for Animate.css
- 🎨 95+ animation effects out of the box
- 🔄 Ability to chain multiple animations in a sequence
- 🔄 Multiple trigger options (hover, click, auto, or both)
- ♿ Comprehensive accessibility features including:
- Keyboard support (Enter/Space for click triggers)
- Screen reader announcements
- Respects prefers-reduced-motion
- ARIA attributes and live regions
- ⚙️ Extensive animation customization:
- Customizable duration
- Animation delays
- Per-animation configuration
- Repeat functionality
- 🎭 Optional hide-after-animation and hide-between-animations features
- 🔄 Optional replay button for ended animations
- 🐛 Debug mode for development
Installation
npm install -D svelte-animate
# or
pnpm install -D svelte-animate
# or
yarn add -D svelte-animateUsage
- Import the component:
import {Animate} from 'svelte-animate';- Basic usage:
<Animate>
<div>This will bounce on hover!</div>
</Animate>- Advanced usage:
<Animate animations="fadeIn" trigger="click" duration={2000} delay={1000} repeat="2">
<div>Click me for a customized animation experience!</div>
</Animate>
<Animate
animations={[
{ action: 'fadeIn', duration: 1000, delay: 500 },
{ action: 'zoomOut', duration: 2000, pause: 1000 }
]}
trigger="click"
hideBetween={true}
hideEnd={true}
showReplayButton={true}
>
<div>Click me for a customized animation sequence!</div>
</Animate>Props
| Prop | Type | Default | Description |
| ------------------ | ----------------------------------------------------------- | ---------- | ------------------------------------------------ |
| children | Snippet | Required | The content to be animated |
| animations | AnimationConfig[] | AnimationType[] | AnimationType | 'bounce' | The animation effects to apply |
| trigger | 'hover' | 'click' | 'both' | 'auto' | 'hover' | What triggers the animation |
| duration | number | 1000 | Default animation duration (ms) |
| hideBetween | boolean | false | Whether to hide element between animations |
| hideEnd | boolean | false | Whether to hide element after animation sequence |
| delay | number | 0 | Default delay before animations start (ms) |
| repeat | '1' | '2' | '3' | 'infinite' | '1' | Number of times to repeat the animation |
| pauseDuration | number | 0 | Default pause between animations (ms) |
| class | string | '' | Additional CSS classes for the container |
| debug | boolean | false | Enable debug mode with visible status updates |
| showReplayButton | boolean | false | Show replay button after animation ends |
AnimationConfig Interface
When using the animations prop with detailed configuration:
interface AnimationConfig {
action: AnimationType; // The animation effect to apply
duration?: number; // Duration for this specific animation
delay?: number; // Delay before this animation starts
pause?: number; // Pause after this animation
}Examples
Basic Hover Animation
<Animate>
<button>Hover to bounce!</button>
</Animate>Click Animation with Delay
<Animate animations="rubberBand" trigger="click" delay={2000} duration={1000}>
<div>Click for a delayed effect!</div>
</Animate>Complex Animation Sequence
<Animate
animations={[
{ action: 'fadeIn', duration: 1000 },
{ action: 'pulse', duration: 500, pause: 1000 },
{ action: 'fadeOut', duration: 1000 }
]}
trigger="both"
repeat="3"
showReplayButton={true}
>
<span>Complex animation sequence!</span>
</Animate>Debug Mode Example
<Animate animations="bounce" trigger="click" debug={true}>
<div>Watch the debug info in the corner!</div>
</Animate>Browser Support
Supports all modern browsers that support:
- Animate.css
- Svelte
- CSS animations
- Media queries (for reduced motion detection)
Contributing
Contributions are welcome! Please feel free to submit a Pull Request. When contributing, please:
- Ensure your code follows the existing style
- Add/update tests as needed
- Update documentation to reflect any changes
- Follow the existing commit message format
License
MIT
Credits
This component is powered by Animate.css.
