- From: Brian Birtles <bbirtles@mozilla.com>
- Date: Thu, 12 Feb 2015 12:02:41 +1100
- To: Glen Huang <curvedmark@gmail.com>, public-fx@w3.org
On 2015/02/10 18:47, Glen Huang wrote:
> Both css transition and css animations use “ease” as the default timing function. Why web-animations use “linear” instead?
>
Hi Glen,
Thanks for your mail. I like the idea of aligning better with CSS
however there is a slight difference in the way Web Animations and CSS
work in this area.
For CSS, the animation-timing-function is always applied between each
pair of keyframes. As a result, the following animation will slow-down
in the middle.
animation: fade-out 3s;
@keyframes fade-out {
from { opacity: 1; }
50% { opacity: 0.5; }
100% { opacity: 0; }
}
The (default) "ease" timing function is applied to each segment
individually.
In Web Animations, however, the following will behave differently.
elem.animate(
[ { opacity: 1 },
{ opacity: 0.5 },
{ opacity: 0 } ],
{ duration: 3000,
easing: 'ease' });
In this case the easing is applied across the whole 3s so there is no
slow-down in the middle. The equivalent to the CSS animation above would be:
elem.animate(
[ { opacity: 1, easing: 'ease' },
{ opacity: 0.5, easing: 'ease' },
{ opacity: 0 } ], 3000);
We could make 'ease' the default for *either* individual keyframes or
for the effect as a whole.
1) If we make Keyframe.easing default to "ease" then to ease the effect
as a whole it would be necessary to set the easing on each keyframe to
"linear" to avoid easing twice.
2) If we make AnimationTimingProperties.easing default to "ease" then it
be necessary to set the easing on the animation to "linear" in order to
do per-keyframe easing. Also, when we introduce groups we would not want
them to use "ease" so we would need to add an "auto" keyword that uses
"linear" for groups.
(2) seems better than (1) but still a little complicated. What do you think?
Best regards,
Brian
Received on Thursday, 12 February 2015 01:03:14 UTC