|
1 | 1 | use leptos::{html::ElementDescriptor, *};
|
2 | 2 | use std::{ops::Deref, time::Duration};
|
3 |
| -use thaw_utils::{add_event_listener, EventListenerHandle}; |
| 3 | +use thaw_utils::{add_event_listener, use_next_frame, EventListenerHandle}; |
4 | 4 |
|
5 | 5 | /// # CSS Transition
|
6 | 6 | ///
|
|
26 | 26 | let any_el = node_el.clone().into_any();
|
27 | 27 | let el = any_el.deref().clone();
|
28 | 28 | let class_list = el.class_list();
|
| 29 | + let next_frame = use_next_frame(); |
29 | 30 | let end_handle = StoredValue::new(None::<EventListenerHandle>);
|
30 | 31 | let end_count = StoredValue::new(None::<usize>);
|
31 | 32 | let finish = StoredValue::new(None::<Callback<()>>);
|
|
53 | 54 |
|
54 | 55 | set_timeout(
|
55 | 56 | move || {
|
56 |
| - finish.update_value(|v| { |
| 57 | + finish.try_update_value(|v| { |
57 | 58 | v.take().map(|f| f.call(()));
|
58 | 59 | });
|
59 | 60 | },
|
@@ -107,7 +108,7 @@ where
|
107 | 108 | display.set(None);
|
108 | 109 |
|
109 | 110 | let class_list = class_list.clone();
|
110 |
| - next_frame(move || { |
| 111 | + next_frame.run(move || { |
111 | 112 | let _ = class_list.remove_1(&enter_from);
|
112 | 113 | let _ = class_list.add_1(&enter_to);
|
113 | 114 |
|
@@ -136,7 +137,7 @@ where
|
136 | 137 | let _ = class_list.add_2(&leave_from, &leave_active);
|
137 | 138 |
|
138 | 139 | let class_list = class_list.clone();
|
139 |
| - next_frame(move || { |
| 140 | + next_frame.run(move || { |
140 | 141 | let _ = class_list.remove_1(&leave_from);
|
141 | 142 | let _ = class_list.add_1(&leave_to);
|
142 | 143 |
|
@@ -170,17 +171,19 @@ where
|
170 | 171 |
|
171 | 172 | show
|
172 | 173 | });
|
| 174 | + |
| 175 | + on_cleanup(move || { |
| 176 | + end_handle.update_value(|handle| { |
| 177 | + if let Some(handle) = handle.take() { |
| 178 | + handle.remove(); |
| 179 | + } |
| 180 | + }); |
| 181 | + }) |
173 | 182 | });
|
174 | 183 |
|
175 | 184 | children(display.read_only())
|
176 | 185 | }
|
177 | 186 |
|
178 |
| -fn next_frame(cb: impl FnOnce() + 'static) { |
179 |
| - request_animation_frame(move || { |
180 |
| - request_animation_frame(cb); |
181 |
| - }); |
182 |
| -} |
183 |
| - |
184 | 187 | #[derive(PartialEq)]
|
185 | 188 | enum AnimationTypes {
|
186 | 189 | Transition,
|
|
0 commit comments