- From: Brian Birtles <bbirtles@mozilla.com>
- Date: Wed, 15 Aug 2012 16:53:51 +0900
- To: "public-fx@w3.org" <public-fx@w3.org>
Web Animations, minutes 14 / 15 August 2012
Etherpad: https://etherpad.mozilla.org/IW8zT9yCin
Present: Dmitry Baranovskiy, Alex Danilo, Shane Stephens, Brian Birtles
Agenda:
1. Status update
2. Tidying up the Timing/TimedItem interface
3. Pause behaviour
4. Suggestions from public-fx, www-style
5. Group templates
6. More thoughts on templates
7. Constructors for Anim etc.
1. STATUS UPDATE
================
Dmitry:
- Sequence group and delay diagram
Brian
- Template / liveness changes
- Ctors for Anim etc.
Shane
- Emulator work, playing around with "resolutionStrategy" for group
templates
2. TIDYING UP THE Timing/TimedItem INTERFACE
============================================
I (Brian) think some renaming might be in order.
In general:
duration -> dur
animation -> anim
function -> func
e.g. AnimFunction -> AnimFunc
iterationDuration -> iterationDur
Shane, Alex: Ok
Dmitry: I don't care
Also to align with HTMLMediaElement::
speed -> playbackRate
Shane, Alex: Ok
Dmitry: I'm fine [with that]
Current pause methods:
pause()
unpause()
getPauseState()
isPaused()
Replace with:
attribute boolean pauseState;
readonly attribute boolean paused; // takes into account parents'
pause state
pause(); // Sets pauseState to true -- for compatibility with
HTMLMediaElement
Shane: what about localPauseState? Need to differentiate more between
paused and pauseState.
Brian: too long!
Alex: OK, makes sense
pause() ► play()?
What about play()?
In HTMLMediaElement, play() unpauses if paused. If it has finished,
it also does a seek, but if it's playing it does nothing... I think
http://dev.w3.org/html5/spec/media-elements.html#dom-media-play
Shane: Can we do something like play(boolean seekToStartIfFinished=true)?
Dmitry: No way! No boolean attributes please.
Brian: Let's make play always seek if finished (like HTMLMediaElement)
and if you don't want that then just change localPauseState.
Alternatives to localPauseState:
Brian: itemPaused, localPause ?!
Shane, Alex: locallyPaused
> Go with locallyPaused for now and add an issue
Another alternative
attribute boolean paused;
readonly attribute boolean effectivelyPaused; ?? notMoving??
asGoodAsPaused ?? aintGonnaPlay ??
Ok, maybe not.
Rename:
iterationDuration -> duration // matches HTMLMediaElement / CSS / SVG
Shane: NOOOOOO
iterationTime -> currentTime // matches HTMLMediaElement
Shane: NOOOOOO
// currentTime is writeable in HTMLMediaElement ... make it
writeable??
itemTime -> ??
itemDuration -> ??
Crazy idea:
-- consistently named, match core concepts
iterationDuration / iterationTime
itemDuration / itemTime
animDuration / animTime (maybe don't worry about these)
-- aliases for "consistency"
currentTime (=iterationTime)
duration (=iterationDuration)
Other options
time.iteration
time.anim
time.item
dur.iteration
dur.anim
dur.item
Or
timing.iteration.time
timing.iteration.dur
timing.iteration.index
timing.anim.time
timing.anim.dur
timing.item.time
timing.item.dur
Dmitry, Shane, Alex: we like this a lot
Need to rename timing to something else though since we already have a
timing property.
Dmitry: s/timing/realtime/ s/timing/current/?
s/timing/now/ ?
s/timing/officiallyDesignedByCommittee_TM_/
> Brian to decide
3. PAUSE BEHAVIOUR
==================
If you pause an animation 25% of the way through, then extend the
startDelay, do you expect the paused animation to jump to, e.g. 10% of
the way through? Or stay fixed at 25%?
> Answer is: 10%, i.e. pausing, in effect, remembers the item time, not
the animation time.
Shane: In future, we can provide a version that remembers the animation time
4. SUGGESTIONS FROM public-fx, www-style
========================================
* François REMY in particular has been very helpful in discussing
integration with media.
(See thread starting here:
http://lists.w3.org/Archives/Public/public-fx/2012JulSep/0006.html )
Some suggestions:
- Liveness proposal A from last time
> Already adopted
- Factor out a common TimeSource interface that MediaElements could
implement as well as TimedItem. I haven't really looked into it too much.
> Needs more thought
- Renaming some of our properties to line up with MediaElements would
help here (e.g. speed -> playbackRate)
> Already agreed to this
- Also possibly reworking timelineStart to follow the autoplay mechanism
> Needs more thought.
- Rather than making the effects timeline not seekable, make it a
property of all groups that they can be seekable / not-seekable.
Shane: thinks this is worse for web devs (harder to reason about) and
worse for implementors (harder to optimise)
- I would prefer if the “animate” and “animateLive” functions were
called “createInstance(s)” and “createLinkedInstance(s)”
> No longer relevant in light of changes made to templates / liveness
- Rename “animate*WithParent(el,group)” in to
“create*Instance(s)InGroup(el,group)”
> No longer relevant once we redo AnimGroupTemplate?
- There are some comments about sorting within the global animation
stack that I (Brian) suggested Shane could follow up on
* Julien Dorra has proposed a :time pseudo class originally for lining
things up with media items but is probably more generally applicable
See thread: http://lists.w3.org/Archives/Public/www-style/2012Jul/0703.html
and http://lists.w3.org/Archives/Public/www-style/2012Aug/0079.html
e.g.
div.welcome:time(3000) {
display: none;
}
(Probably want to use seconds instead of milliseconds however)
I suggest the time could be interpreted based on the time space of the
target element. e.g. if the div was a child of a <par> group the
3000 would be taken as being in the time space of the <par> group.
That would be one avenue for putting CSS animations inside time containers?
e.g.
<par>
<div class="welcome">
</par>
div.welcome:time(3) {
animation: ...
}
?
Not sure how that works for <seq> containers however where the start
time is ignored.
If you define <video> etc. as establishing their own time space (i.e.
make them "animation groups", so to speak) then you can sync with video.
You can also do this:
<video id="video">
<animate begin="3s" dur="2s" attributeName="filter" ...></animate>
</video>
> General sentiment that this looks interesting
* There was also a suggestions somewhere about making the result of
animate(document.querySelectorAll(".zombie")) live--i.e. as new
elements get added with that class, spawning animations to them.
AI: Shane will look into whether this is currently the "more natural"
result anyway.
5. GROUP TEMPLATES
==================
Shane showed some good ideas about how group templates might make use of
a selection strategy for items to target different children of the group.
Below, is just some thinking out-loud about how it might map to SVG.
<svg>
<g>
<g class="foo">
<rect/>
<rect/>
<g>
<circle/>
</g>
<g>
<circle/>
</g>
</g>
<defs>
<par select=".foo" id="complex-anim">
<animate select="rect:nth-child(2)" ... />
<par select="g">
<animate select="circle" ... />
<animate ... />
</par>
</par>
</defs>
</svg>
Some discussion about what the default scoping was for <par
select=".foo"> and it seems to be agreed it would be that of the parent
element.
AI: Shane to specify this and add as an issue Brian's suggestion of
attaching the resolutionStrategy to the group rather than the element.
6. MORE THOUGHTS ON TEMPLATES
=============================
interface Anim {
readonly attribute Timing timing;
attribute AnimFunc animFunc;
}
Thinking of making timing writeable. Should it also be shareable? We
*can* define it so that setting it automatically makes a copy. SVG does
that a lot so it's not unusual. Or we can make it shareable.
Likewise for AnimFunc. One difference here is that if we allow AnimFunc
to potentially be user-defined, we are kind of forced into allowing
sharing??
Update: I've (Brian) made Anim.func writeable and shareable as well as
Anim.template. I'll make Anim.timing writeable and shareable soon too I
expect.
7. CONSTRUCTORS ON Anim etc.
============================
See changes to spec.
Currently looking at an interface like so:
var anim = new Anim(elem, { dur: 3, height: '100px' })
Shane:
//also allow
var anim = new Anim(elem, new Timing(...));
Brian: We already support,
var anim = new Anim(elem, { timing: new Timing(...), animFunc: new
KeyframesAnimFunc(...) } )
var anim = new Anim(elem, { dur: 3, animFunc: new
KeyframesAnimFunc(...) })
= new Anim(elem, { dur: 3, height: '100px', width:
'200px' })
Shane: used to have it that:
animate - bag o' properties
constructor - pre-built objects
This isn't more complicated
Sent mail to public-script-coord about supporting this:
http://lists.w3.org/Archives/Public/public-script-coord/2012JulSep/0100.html
> Need to revisit this next time
Next meeting: 21 Aug 18:20 PDT / 22 Aug 11:20 AEST / 22 Aug 10:20 JST @
https://etherpad.mozilla.org/IFCnsPoRSr
Received on Wednesday, 15 August 2012 07:54:50 UTC