-
Notifications
You must be signed in to change notification settings - Fork 48.6k
Cancel finished view transitions Animations manually in fire-and-forget too #32545
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@@ -1817,6 +1833,9 @@ export function startGestureTransition( | |||
} | |||
for (let i = 0; i < animations.length; i++) { | |||
const anim = animations[i]; | |||
if (anim.playState !== 'running') { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This alone doesn't really help anything because the "finished" animations seems to interfere regardless but we shouldn't really restart any animation here. We expect all of them to be running. So this is just defensive coding.
Comparing: cc68006...4342179 Critical size changesIncludes critical production bundles, as well as any change greater than 2%:
Significant size changesIncludes any change greater than 0.2%: (No significant changes) |
7e8fb58
to
d3bc60c
Compare
This is in preparation for nested View Transitions. In that case we shouldn't cancel other nested View Transitions than the one we started.
d3bc60c
to
9be9159
Compare
…et too (#32545) Otherwise these can survive into the next View Transition and cause havoc to that transition. This was appearing as a flash in Safari in the fixture when going from A->B. This triggers a View Transition and at the same time the scroll position updates in an effect. That fires a scroll event which starts a gesture. This shouldn't really happen and the SwipeRecognizer should ideally ignore those but it's good to surface edge cases. That gesture is blocked on the View Transition finishing and then immediately after it starts a gesture View Transition. That gesture then picked up the former Animation from the previous transition which caused issues. This PR fixes that flash. DiffTrain build for [a8c2bbd](a8c2bbd)
[diff facebook/react@029e8bd6...0ca3deeb](facebook/react@029e8bd...0ca3dee) <details> <summary>React upstream changes</summary> - facebook/react#32569 - facebook/react#32567 - facebook/react#32549 - facebook/react#32545 - facebook/react#32566 - facebook/react#32551 - facebook/react#32550 - facebook/react#32528 - facebook/react#32359 - facebook/react#32536 - facebook/react#32539 </details>
Otherwise these can survive into the next View Transition and cause havoc to that transition.
This was appearing as a flash in Safari in the fixture when going from A->B. This triggers a View Transition and at the same time the scroll position updates in an effect. That fires a scroll event which starts a gesture. This shouldn't really happen and the SwipeRecognizer should ideally ignore those but it's good to surface edge cases. That gesture is blocked on the View Transition finishing and then immediately after it starts a gesture View Transition. That gesture then picked up the former Animation from the previous transition which caused issues. This PR fixes that flash.