summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.changeset/small-nails-try.md5
-rw-r--r--packages/astro/components/ViewTransitions.astro9
2 files changed, 11 insertions, 3 deletions
diff --git a/.changeset/small-nails-try.md b/.changeset/small-nails-try.md
new file mode 100644
index 000000000..3f6f591f1
--- /dev/null
+++ b/.changeset/small-nails-try.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+On back navigation only animate view transitions that were animated going forward.
diff --git a/packages/astro/components/ViewTransitions.astro b/packages/astro/components/ViewTransitions.astro
index 3967d0aee..4b7a46551 100644
--- a/packages/astro/components/ViewTransitions.astro
+++ b/packages/astro/components/ViewTransitions.astro
@@ -306,10 +306,11 @@ const { fallback = 'animate' } = Astro.props as Props;
return;
}
- // hash change creates no state.
+ // History entries without state are created by the browser (e.g. for hash links)
+ // Our view transition entries always have state.
+ // Just ignore stateless entries.
+ // The browser will handle navigation fine without our help
if (ev.state === null) {
- persistState({ index: currentHistoryIndex, scrollY });
- ev.preventDefault();
return;
}
@@ -344,6 +345,8 @@ const { fallback = 'animate' } = Astro.props as Props;
addEventListener(
'scroll',
throttle(() => {
+ // only updste history entries that are managed by us
+ // leave other entries alone and do not accidently add state.
if (history.state) {
persistState({ ...history.state, scrollY });
}