- From: Shane Stephens <shans@google.com>
- Date: Mon, 22 Jun 2015 23:57:29 +0000
- To: "Tab Atkins Jr." <jackalmage@gmail.com>, Brian Birtles <bbirtles@mozilla.com>
- Cc: "public-fx@w3.org" <public-fx@w3.org>
- Message-ID: <CAGTfzwR7WimVFOi5jK=Mo+c2fYysegVgormmW6EsQuNQTNmwzA@mail.gmail.com>
An alternative proposal:
CSS animations use sequence number as priority, and are created in tree-
and list- order. CSS Animations are still prioritized absolutely above
script animations (there are two lists). Changing an animation-name
property triggers an update of all listed sequence numbers. So:
elem.style.animation = 'a 2s, b 3s, c 4s'; // a: 0, b: 1, c: 2
let b = elem.getAnimations[1];
let c = elem.getAnimations[2];
elem.style.animation = 'a 2s, d 5s'; //a: 3, d: 4
c.play(); // c promoted to script animation, keeps sequence number
b.play(); // b promoted to script animation, keeps sequence number
elem.getAnimations(); // what is the order here? b,c,a,d
Script animations have preserved text order in terms of their *definition*
(which is important, see below).
Question: does getAnimations sort script animations separately from CSS
animations? I think it probably should so that the order reflects
application priority.
elem.style.animation = 'a 2s, b 3s'; // a: 0, b: 1
getComputedStyle(elem).animationName; // flush style
elem.style.animation = 'a 2s, c 4s, b 3s'; // a: 2, c: 3, b: 4
let anims = elem.getAnimations(); // returns a, c, b
elem.style.animation = '';
anims.forEach(anim => anim.play());
elem.getAnimations(); // returns a, c, b.
So this works nicely now too.
Taking your weirdness:
var moveLeft = new Animation(...);
var moveRight = new Animation(...);
moveRight.play();
...
moveLeft.play();
// Wait, why doesn't moveLeft take effect?
Let's extend it another step, assuming that transitioning from idle does
update priority:
var moveLeft = new Animation(...);
var moveRight = new Animation(...);
moveRight.play();
...
moveLeft.play(); // moveLeft takes effect
moveRight.play(); // wait, why doesn't moveRight take effect?
So you haven't solved anything, just pushed the weirdness down a level so
that it bites harder.
Cheers,
-Shane
On Tue, Jun 23, 2015 at 6:23 AM Tab Atkins Jr. <jackalmage@gmail.com> wrote:
> On Sun, Jun 21, 2015 at 10:24 PM, Brian Birtles <bbirtles@mozilla.com>
> wrote:
> > On 2015/06/22 14:14, Brian Birtles wrote:
> >> On 2015/06/22 13:10, Shane Stephens wrote:
> >>> One concern I have is that currently text order (or creation order) is
> >>> inviolate which makes it easy to reason about; but that might be
> >>> outweighed by the fact that if we made this change then authors could
> >>> (to a degree) choose to reorder the animations.
> >
> > I just realized we may be talking cross purposes here. CSS animations and
> > transitions never restart so long as they are bound to markup. As a
> result,
> > the difference here is just:
> >
> > priority with old behavior: text order (or creation order)
> > priority with new behavior: text order (or start order)
>
> I think I lean your way. "Creation order" applying to CSS-created
> animations is actually pretty weird. It's a corner-case, but still.
>
> Your moveLeft/moveRight example is also compelling. But what about
> the opposite case? I think it's reasonable to be able to set up some
> animations with a known priority, and turn them on/off based on user
> input. For example,
> <https://rawgit.com/jennschiffer/who-visualized-the-bomp/master/index.html
> >
> has several animations that coordinate. They don't quite overlap each
> other, but if they did, it would be better for them to override
> deterministically somehow, rather than depending on exactly what order
> people turned the animations on. Is there any way to do this? (It's
> possible this is answered by Shane already in his last email.)
>
> ~TJ
>
Received on Monday, 22 June 2015 23:58:08 UTC