dioxus_spring/
use_animated.rs1use dioxus::{
2 hooks::use_memo,
3 signals::{Readable, Signal},
4 web::WebEventExt,
5};
6use dioxus_use_mounted::UseMounted;
7
8pub 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}