leptos_animation

Crates.ioleptos_animation
lib.rsleptos_animation
version0.5.2
sourcesrc
created_at2023-06-29 15:33:37.759947
updated_at2024-05-15 12:06:32.611999
descriptionCreate animated signals in the Leptos framework
homepagehttps://github.com/PaulWagener/leptos_animation
repositoryhttps://github.com/PaulWagener/leptos_animation
max_upload_size
id903404
size36,427
Paul Wagener (PaulWagener)

documentation

README

Docs | Demo

Create derived signals that are animated versions of the original signal

use leptos::*;
use leptos_animation::*;

#[component]
pub fn Counter() -> impl IntoView {
    AnimationContext::provide();

    let (value, set_value) = create_signal(0.0);

    let animated_value = create_animated_signal(move || value.get().into(), tween_default);

    let clear = move |_| set_value.set(0.0);
    let decrement = move |_| set_value.update(|value| *value -= 1.0);
    let increment = move |_| set_value.update(|value| *value += 1.0);

    view! {
        <main class="simple">
            <button on:click=clear>"Clear"</button>
            <button on:click=decrement>"-1"</button>
            <button on:click=increment>"+1"</button>
            <div>"Value: " {value} <br/> "Animated value: " {animated_value}</div>
        </main>
    }
}

Features

  • Allows for multiple animations playing simultaneously
  • Efficiently calls window.request_animation_frame(): only when there are animations playing and only once per frame even if there are multiple animated signals running.
  • Allows for custom durations, easing functions, target updates and tween methods. Can be made to work for any type.
  • Animated signals are all updated simultaneously per frame. Effects that use multiple animated signals are called only once per frame.
Commit count: 63

cargo fmt