Expand description
§Leptos Motion
A comprehensive animation library for Leptos with Framer Motion-inspired API.
§Features
- Declarative animations with Motion-style API
- Hardware acceleration via Web Animations API with RAF fallback
- Gesture support for drag, hover, tap, and more
- Layout animations using FLIP technique
- Scroll animations with intersection observers
- Type safety with full Rust compile-time validation
- High performance targeting 60fps for 100+ concurrent animations
- Animation presets for common patterns
- Keyframe animations for complex multi-step animations
- Variants for named animation states
§Quick Start
use leptos::*;
use leptos_motion::*;
use std::collections::HashMap;
#[component]
fn App() -> impl IntoView {
let mut initial = HashMap::new();
initial.insert("opacity".to_string(), AnimationValue::Number(0.0));
initial.insert("scale".to_string(), AnimationValue::Number(0.5));
let mut animate = HashMap::new();
animate.insert("opacity".to_string(), AnimationValue::Number(1.0));
animate.insert("scale".to_string(), AnimationValue::Number(1.0));
view! {
<MotionDiv
class="my-element".to_string()
initial=initial
animate=animate
transition=Transition {
duration: Some(0.5),
ease: Easing::EaseOut,
delay: None,
repeat: RepeatConfig::Never,
stagger: None,
}
>
"Hello Leptos Motion!"
</MotionDiv>
}
}§Core Concepts
§Animation Values
Animation values represent different types of animatable properties:
use leptos_motion::*;
let opacity = AnimationValue::Number(1.0);
let position = AnimationValue::Pixels(100.0);
let rotation = AnimationValue::Degrees(45.0);
let color = AnimationValue::Color("#ff0000".to_string());§Transitions
Configure how animations behave:
// Spring animation
let spring = Transition {
ease: Easing::Spring(SpringConfig {
stiffness: 100.0,
damping: 10.0,
mass: 1.0,
..Default::default()
}),
..Default::default()
};
// Tween animation
let tween = Transition {
duration: Some(0.3),
ease: Easing::EaseInOut,
delay: Some(0.1),
..Default::default()
};§Gestures
Add interactivity to your animations:
let mut hover_target = HashMap::new();
hover_target.insert("scale".to_string(), AnimationValue::Number(1.1));
let mut tap_target = HashMap::new();
tap_target.insert("scale".to_string(), AnimationValue::Number(0.9));
let _view = view! {
<MotionDiv
while_hover=hover_target
while_tap=tap_target
drag=DragConfig::default()
>
"Interactive element"
</MotionDiv>
};Modules§
- animation
- Core animation types and builders
- drag
- Drag gesture implementation
- easing
- Easing functions for smooth animation transitions
- external
- Re-export commonly used external types
- flip
- FLIP (First, Last, Invert, Play) animation implementation
- gesture_
detector - Main gesture detector that coordinates all gesture types
- hover
- Hover gesture implementation
- layout_
tracker - Layout tracking and performance monitoring
- multi_
touch - Multi-touch gesture detection and recognition
- presets
- Animation presets and common patterns
- shared_
elements - Shared element transitions for seamless view changes
- simplified_
gesture_ api - Simplified Gesture API
- simplified_
layout_ api - Simplified Layout/Scroll API
- spring
- Spring physics simulation for natural animations
- tap
- Tap gesture implementation
Macros§
- create_
motion_ elements - Macro for creating motion elements (placeholder)
- motion_
target - Macro for creating animation targets
Structs§
- Animation
Config - Complete animation configuration
- Animation
Handle - Unique identifier for animation instances
- Drag
Config - Drag configuration
- Drag
Constraints - Drag constraints for limiting drag movement
- FLIP
Animation - FLIP animation instance
- FLIP
Animator - FLIP animator for managing layout transitions
- FLIP
State - FLIP animation state
- Gesture
Config - Advanced gesture configuration
- Gesture
Detector - Main gesture detector that coordinates all gesture types
- Gesture
Result - Gesture recognition result
- Layout
Animation Config - Layout animation configuration
- Layout
Change - Layout change record
- Layout
Info - Layout information for FLIP animations
- Layout
Tracker - Layout tracker for monitoring changes
- Motion
Props - Motion component props
- Multi
Touch Gesture Detector - Multi-touch gesture detector
- Multi
Touch State - Multi-touch gesture state
- Scroll
Animation State - Scroll animation state
- Scroll
Animator - Scroll animator
- Scroll
Trigger - Scroll trigger configuration
- Shared
Element Config - Shared element configuration
- Shared
Element Manager - Manager for shared element transitions
- Simplified
Animation Status - Simplified animation status
- Simplified
Gesture Bounds - Simplified gesture bounds
- Simplified
Gesture Config - Simplified gesture configuration
- Simplified
Gesture Data - Simplified gesture data
- Simplified
Gesture Detector - Simplified gesture detector that provides a clean, simple interface
- Simplified
Gesture Result - Simplified gesture result
- Simplified
Layout Config - Simplified layout configuration
- Simplified
Layout Manager - Simplified layout manager that provides a clean, simple interface
- Simplified
Performance Metrics - Simplified performance metrics
- Simplified
Vector2D - Simplified 2D vector
- Spring
Config - Spring animation configuration
- Touch
Point - Touch point information
- Transform
Values - Transform values for FLIP animations
- Transition
- Transition configuration
Enums§
- Animation
Value - Animation value types that can be animated
- Drag
Axis - Drag axis constraint
- Easing
- Easing function types
- Easing
Function - Easing function for FLIP animations
- Gesture
Event - Gesture event types
- Layout
Change Type - Type of layout change
- Multi
Touch Gesture Type - Types of multi-touch gestures
- Performance
Impact - Performance impact of layout change
- Presence
Mode - Mode for handling presence animations
- Repeat
Config - Repeat configuration
- Scroll
Direction - Scroll direction
- Simplified
Easing - Simplified easing functions
- Simplified
Gesture Type - Simplified gesture types
- ZIndex
Strategy - Z-index strategy for shared elements
Constants§
- DESCRIPTION
- Library information
- VERSION
- Version information
Traits§
- Animation
Engine - Core animation engine trait
- Gesture
Handler - Gesture handler trait for custom gesture implementations
Functions§
- Animate
Presence - AnimatePresence component for handling enter/exit animations
- Motion
Div - Simple MotionDiv component for animated div elements
- Motion
Span - Simple MotionSpan component for animated span elements
Type Aliases§
- Result
- Result type for animation operations
Derive Macros§
- Motion
Component - Derive macro for motion components (placeholder)