// https://www.w3.org/TR/web-animations-1/#the-effecttiming-dictionaries dictionary EffectTiming { double delay = 0; double endDelay = 0; FillMode fill = "auto"; double iterationStart = 0.0; unrestricted double iterations = 1.0; (unrestricted double or DOMString) duration = "auto"; PlaybackDirection direction = "normal"; DOMString easing = "linear"; }; // https://www.w3.org/TR/web-animations-1/#dictdef-optionaleffecttiming dictionary OptionalEffectTiming { double delay; double endDelay; FillMode fill; double iterationStart; unrestricted double iterations; (unrestricted double or DOMString) duration; PlaybackDirection direction; DOMString easing; }; // https://www.w3.org/TR/web-animations-1/#the-fillmode-enumeration enum FillMode { "none", "forwards", "backwards", "both", "auto" }; // https://www.w3.org/TR/web-animations-1/#the-playbackdirection-enumeration enum PlaybackDirection { "normal", "reverse", "alternate", "alternate-reverse" }; // https://www.w3.org/TR/web-animations-1/#the-computedeffecttiming-dictionary dictionary ComputedEffectTiming : EffectTiming { unrestricted double endTime; unrestricted double activeDuration; double? localTime; double? progress; unrestricted double? currentIteration; }; // https://www.w3.org/TR/web-animations-1/#the-animationeffect-interface [Exposed=Window] interface AnimationEffect { EffectTiming getTiming(); ComputedEffectTiming getComputedTiming(); undefined updateTiming(optional OptionalEffectTiming timing = {}); };