dioxus_spring/
use_animated.rs

1use dioxus::{
2    hooks::use_memo,
3    signals::{Readable, Signal},
4    web::WebEventExt,
5};
6use dioxus_use_mounted::UseMounted;
7
8/// Hook to use an animated value and apply it to a mounted element.
9pub fn use_animated<V>(
10    mounted: UseMounted,
11    value_ref: Signal<V>,
12    mut make_style: impl FnMut(V) -> String + 'static,
13) where
14    V: Clone,
15{
16    use_memo(move || {
17        let value = value_ref.read();
18        set_style(mounted, &make_style(value.clone()));
19    });
20}
21
22fn set_style(mounted: UseMounted, style: &str) {
23    if let Some(element) = &*mounted.signal.read() {
24        let raw_elem = element.try_as_web_event().unwrap();
25
26        raw_elem.set_attribute("style", style).unwrap();
27    }
28}