mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
ui: handle cancelled view transitions
This commit is contained in:
1 parent
e674541add
commit
0d6aa7788c
1 file changed
+10
-3
@@ -188,9 +188,16 @@ let transition: ViewTransition | null = null;
|
|||||||
export async function withTransitionCallback(callback: () => (Promise<void> | void)) {
|
export async function withTransitionCallback(callback: () => (Promise<void> | void)) {
|
||||||
if (!document.startViewTransition || document.visibilityState === 'hidden') return callback?.();
|
if (!document.startViewTransition || document.visibilityState === 'hidden') return callback?.();
|
||||||
transition?.skipTransition?.();
|
transition?.skipTransition?.();
|
||||||
transition = document.startViewTransition(callback);
|
const currentTransition = document.startViewTransition(callback);
|
||||||
await transition.finished;
|
transition = currentTransition;
|
||||||
transition = null;
|
const ready = currentTransition.ready.catch((error) => {
|
||||||
|
if (!(error instanceof DOMException) || !['AbortError', 'InvalidStateError'].includes(error.name)) throw error;
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
await Promise.all([ready, currentTransition.finished]);
|
||||||
|
} finally {
|
||||||
|
if (transition === currentTransition) transition = null;
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user