Open
Bug 1472922
Opened 6 years ago
Updated 2 years ago
Use a fallback AnimationEventDispatcher if there is no timeline in Animation::QueuePlaybackEvent
Categories
(Core :: DOM: Animation, enhancement, P3)
Core
DOM: Animation
Tracking
()
NEW
People
(Reporter: hiro, Unassigned)
References
Details
In bug 1354501, I didn't implement fallback case if there is no timeline when we queue animation playback events.
As Brian noted in bug 1354501 comment 63, the spec says we should use a task queue is used for such case. But it sounds bit opposed what we did in 1354501.
As per the HTML processing model [1], the task queue is processed before '7. Update the rendering:' which means the event is processed at different timings. Also it actually means what we did before 1354501.
I think, even if there is no timeline, the animation is still associated with a document, then the document should have a pending animation event queue [2], so we can use the queue instead. It's still unclear to me that which document, the document for the target element or for the animation object is better, though.
[1] https://html.spec.whatwg.org/multipage/webappapis.html#processing-model-8
[2] https://drafts.csswg.org/web-animations-1/#pending-animation-event-queue
Reporter | ||
Comment 1•6 years ago
|
||
I just realized that, IIUC, we do use the timeline for the document in the current JS context [1].
So,
const target = subframe.contentDocument.getElementById('target');
target.animate({ opacity: [ 0, 1 ] }, 1000);
in this case, the animation events are dispatched in the parent document instead of the subframe one. So if the animation has no timeline, then we should use the document that the animation object belongs to, which means we should use GetDocumentIfCurrent().
Anyway, we should write wpt somehow for this.
I might be wrong though. :)
[1] https://hg.mozilla.org/mozilla-central/file/987ea0d6a000/dom/animation/Animation.cpp#l102
Reporter | ||
Updated•6 years ago
|
Assignee: nobody → hikezoe
Status: NEW → ASSIGNED
Priority: P3 → P2
Reporter | ||
Updated•6 years ago
|
Assignee: hikezoe → nobody
Status: ASSIGNED → NEW
Priority: P2 → P3
Reporter | ||
Comment 2•6 years ago
|
||
(In reply to Hiroyuki Ikezoe (:hiro) from comment #1)
> I just realized that, IIUC, we do use the timeline for the document in the
> current JS context [1].
>
> So,
>
> const target = subframe.contentDocument.getElementById('target');
> target.animate({ opacity: [ 0, 1 ] }, 1000);
This example is wrong. Element.animate() uses the document timeline for the target element.
const effect = new KeyframeEffect(target, null, 1000);
const animation = new Animation(effect);
This animation uses the parent document timeline.
Updated•2 years ago
|
Severity: normal → S3
You need to log in
before you can comment on or make changes to this bug.
Description
•