-
Notifications
You must be signed in to change notification settings - Fork 680
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
[web-animations-1] commitStyles followed by cancel should not trigger a transition #11084
Comments
Also, apparently Safari shows the same behavior as Gecko for this case. |
I can confirm that WebKit performs a flush immediately after it was established that we can proceed with this method and decided not to throw a |
In the starting of transitions, it says:
To me, using the the |
This seems to be why we don't start a transition in blink, we still consider the canceled animation in CSSAnimations::CanCalculateTransitionUpdateForProperty. This is I think consistent with my suggestion above, #11084 (comment), as if the animation were still active it would produce the same before and after change style. |
I see. I can understand that for animations created/cancelled by |
I'm going to try to set aside a bit of time in the next day or two to run a few tests to see if I can convince myself of the Chrome behavior or otherwise work out what's reasonable to spec. |
I think of it as we haven't had a style change event where their previous styles could actually be undone yet, so even though they're canceled we should still consider the styles they had been applying with the next style change event. |
Seems like this relates to #6688 where I also brought up that this shouldn't trigger a transition - #6688 (comment) |
In Mozilla bug 1917071 we came across a case where Gecko is firing transitions as a result of calling
commitStyles
.Specifically, for the following content:
After analysis, it looks like the problem is that although
commitStyles
is defined as triggering a style flush:It doesn't define when this takes place. Logically it needs to happen towards the start of the procedure so that the latest styles are applied. The code for Gecko and Blink shows they flush style before updating inline style.Edit: It looks like the spec does define that pending style changes are applied at the start of the procedure ("If, after applying any pending style changes...").
However, there is no requirement to flush styles at the end of the procedure. Furthermore, my reading of the procedure to update the style attribute doesn't require computing style immediately. As a result, the style attribute may be updated but not yet reflected in the corresponding element's computed style.
If the animation is canceled before style is next computed, the changes to inline style will not be reflected in the before-change style since it only requires updating computed values from declarative animations. As a result, canceling the animation can cause a change to be observed and transitions to be fired.
I'm not exactly sure why the bug doesn't reproduce in Blink. Perhaps it is reflecting the changes to the style attribute as part of producing the before-change style?
I think we need to specify that
commitStyles
should somehow cause the computed style to be synchronously updated as a result of updating the style attribute—or somehow indicate thatcommitStyles
followed by cancelling an animation should not trigger a transition. We may need to refine this wording when we tackle #5394, however./cc @flackr @graouts @emilio @canalun @vmpstr
The text was updated successfully, but these errors were encountered: