-
Notifications
You must be signed in to change notification settings - Fork 735
Description
I would like to revive work on custom effects, an idea currently unofficially drafted in Web Animations Level 2. I have filed a patch for WebKit to support the CustomEffect
interface as well as a new document.timeline.animate()
method. The motivation is to bridge the gap between the poorly-named and rudimentary requestAnimationFrame()
and Web Animations allowing authors to harness the full power of the Web Animations model such that scripted animations may be paused, resumed, seeked, etc.
Some example usage:
const animation = new Animation;
animation.effect = new CustomEffect(progress => { … }, 1000);
animation.play();
This code is equivalent to the more idiomatic:
document.timeline.animate(progress => { … }, 1000);
The idea here is that document.timeline.animate()
should be to CustomEffect
what element.animate()
is to KeyframeEffect
.
The section on custom effects in the current level 2 spec starts with this issue:
This whole feature needs to be revisited. The current thinking is that rather than having custom effects, we should simply have an onupdate callback on each animation effect. That would allow, for example, augmenting an existing effect with a function that performs logging or triggers additional actions at certain times. With the current arrangement, doing this would require adding a parent group just to achieve this.
I personally think that a dedicated CustomEffect
interface is a simple and purposeful way to specify an animation where its application is performed by script. I expect that it is simpler to specify how this specific class of effects would work rather than trying to add an onupdate
callback that would apply to keyframe effects as well.
You'll also notice the lack of a target
for CustomEffect
. I believe that it should not be necessary to specify a target for a custom effect since it may not target a single node, or even a node at all, but rather a JS object controlling the rendering of a scene using <canvas>
APIs.
That being said, I am very open to all feedback to work towards exposing callback-based animations in Web Animations. All work conducted in WebKit is behind an off-by-default experimental feature flag and we have no intention to expose this to the Web until we have consensus on the way forward.
Cc @birtles @flackr @stephenmcgruer @kevers-google @majido @smfr @grorg @hober @ogerchikov @BorisChiou @hiikezoe