[svg-animation] ⦠message topic â¦â (archive)Copyright © 2025 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and document use rules apply.
This specification defines SVG Animations, a set of features based on SMIL for declaratively animating SVG content.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
This document is the 14 September 2025 Editorâs Draft of SVG Animation. The purpose of this specification is to separate out SVG's animation features into a separate document.
Comments on this Editorâs Draft are welcome.
Comments can be sent to www-svg@w3.org,
the public email list for issues related to vector graphics on the Web. This list is
archived and
senders must agree to have their message publicly archived from their
first posting. To subscribe send an email to
www-svg-request@w3.org with
the word subscribe in the subject line.
This document has been produced by the W3C SVG Working Group as part of the Graphics Activity within the W3C Interaction Domain. The goals of the W3C SVG Working Group are discussed in the W3C SVG Charter. The W3C SVG Working Group maintains a public Web page, http://www.w3.org/Graphics/SVG/, that contains further background information. The authors of this document are the SVG Working Group participants.
This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
Publication as a Editorâs Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
A list of current W3C Recommendations and other technical documents can be found at http://www.w3.org/TR/. W3C publications may be updated, replaced, or obsoleted by other documents at any time.
This document is governed by the 1 August 2014 W3C Process Document.
This section is non-normative.
SVG supports the ability to change vector graphics over time. SVG content can be animated in the following ways:
This module extends definitions in SVG 2.[SVG2]
SVG's animation elements were developed in collaboration with the W3C Synchronized Multimedia (SYMM) Working Group, developers of the Synchronized Multimedia Integration Language (SMIL) 3.0 Specification [SMIL].
The SYMM Working Group, in collaboration with the SVG Working Group, has authored the SMIL Animation specification [SMILANIM], which represents a general-purpose XML animation feature set. SVG incorporates the animation features defined in the SMIL Animation specification and provides some SVG-specific extensions.
For an introduction to the approach and features available in any language that supports SMIL Animation, see SMIL Animation overview and SMIL Animation animation model ([SMILANIM], sections 2 and 3). For the list of animation features which go beyond SMIL Animation, see SVG extensions to SMIL Animation.
SVG is a host language in terms of SMIL Animation and therefore introduces additional constraints and features as permitted by that specification. Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for SVG's animation elements and attributes is the SMIL Animation specification [SMILANIM].
SVG supports the following three animation elements which are defined in the SMIL Animation specification:
| âanimateâ | allows attributes and properties to be assigned different values over time |
| âsetâ | a convenient shorthand for âanimateâ, which produces a discrete change to an animated attribute or property. It is most commonly used with values which do not support linear interpolation, such as the visibility property |
| âanimateMotionâ | moves an element along a motion path |
Additionally, SVG includes the following compatible extensions to SMIL Animation:
| âanimateTransformâ | modifies one of SVG's transformation values over time, such as the transform property or the âpatternTransformâ attribute. |
| âpathâ attribute | SVG allows any feature from SVG's path data syntax to be specified in a âpathâ attribute to the âanimateMotionâ element (SMIL Animation only allows a subset of SVG's path data syntax within a âpathâ attribute) |
| âmpathâ element | SVG allows an âanimateMotionâ element to contain a child âmpathâ element which references an SVG âpathâ element or shape element as the definition of the motion path |
| âkeyPointsâ attribute | SVG adds a âkeyPointsâ attribute to the âanimateMotionâ to provide precise control of the velocity of motion path animations |
| ârotateâ attribute | SVG adds a ârotateâ attribute to the âanimateMotionâ to control whether an object is automatically rotated so that its x-axis points in the same direction (or opposite direction) as the directional tangent vector of the motion path |
For compatibility with other aspects of the language, SVG uses URL references via an âhrefâ attribute to identify the elements which are to be targets of the animations, as allowed in SMIL 3.0.
SMIL Animation requires that the host language define the meaning for document begin and the document end. Since an âsvgâ is sometimes the root of the XML document tree and other times can be a component of a parent XML grammar, the document begin for a given SVG document fragment is defined to be the exact time at which the âsvgâ element's load event is triggered. The document end of an SVG document fragment is the point at which the document fragment has been released and is no longer being processed by the user agent. However, nested âsvgâ elements within an SVG document do not constitute document fragments in this sense, and do not define a separate document begin; all times within the nested SVG fragment are relative to the document time defined for the root âsvgâ element.
For SVG, the term presentation time indicates the position in the timeline relative to the document begin of a given document fragment.
Example anim01 below demonstrates each of SVG's four animation elements.
<?xml version="1.0" standalone="no"?>
<svg width="8cm" height="3cm" viewBox="0 0 800 300"
xmlns="http://www.w3.org/2000/svg">
<desc>Example anim01 - demonstrate animation elements</desc>
<rect x="1" y="1" width="798" height="298"
fill="none" stroke="blue" stroke-width="2" />
<!-- The following illustrates the use of the 'animate' element
to animate a rectangles x, y, and width attributes so that
the rectangle grows to ultimately fill the viewport. -->
<rect id="RectElement" x="300" y="100" width="300" height="100"
fill="rgb(255,255,0)" >
<animate attributeName="x" begin="0s" dur="9s"
fill="freeze" from="300" to="0" />
<animate attributeName="y" begin="0s" dur="9s"
fill="freeze" from="100" to="0" />
<animate attributeName="width" begin="0s" dur="9s"
fill="freeze" from="300" to="800" />
<animate attributeName="height" begin="0s" dur="9s"
fill="freeze" from="100" to="300" />
</rect>
<!-- Set up a new user coordinate system so that
the text string's origin is at (0,0), allowing
rotation and scale relative to the new origin -->
<g transform="translate(100,100)" >
<!-- The following illustrates the use of the 'set', 'animateMotion',
'animate' and 'animateTransform' elements. The 'text' element
below starts off hidden (i.e., invisible). At 3 seconds, it:
* becomes visible
* continuously moves diagonally across the viewport
* changes color from blue to dark red
* rotates from -30 to zero degrees
* scales by a factor of three. -->
<text id="TextElement" x="0" y="0"
font-family="Verdana" font-size="35.27" visibility="hidden" >
It's alive!
<set attributeName="visibility" to="visible"
begin="3s" dur="6s" fill="freeze" />
<animateMotion path="M 0 0 L 100 100"
begin="3s" dur="6s" fill="freeze" />
<animate attributeName="fill"
from="rgb(0,0,255)" to="rgb(128,0,0)"
begin="3s" dur="6s" fill="freeze" />
<animateTransform attributeName="transform"
type="rotate" from="-30" to="0"
begin="3s" dur="6s" fill="freeze" />
<animateTransform attributeName="transform"
type="scale" from="1" to="3" additive="sum"
begin="3s" dur="6s" fill="freeze" />
</text>
</g>
</svg>
At zero seconds |
 | At three seconds |
At six seconds |
 | At nine seconds |
The sections below describe the various animation attributes and elements.
The following attribute is common to all animation elements and identifies the target element for the animation.
Attribute definitions:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| href | URL [URL] | (none) | no |
A URL reference to the element which is the target of this animation element and which therefore will be modified over time.
The URL must point to exactly one target element which is capable of being the target of the given animation element. If the URL points to multiple target elements, if the given target element is not capable of being a target of the given animation element, or if the given target element is not part of the current document, then the animation element will not affect any target element. However, the animation element will still operate normally with regard to its timing properties. Specifically, TimeEvents are dispatched and the animation element can be used as syncbase in an identical fashion to when the URL refers to a valid target element.
If the âhrefâ attribute or the deprecated âxlink:hrefâ attribute is not provided, then the target element will be the immediate parent element of the current animation element. The behavior when both âhrefâ and âxlink:hrefâ are specified is defined by the common handling for deprecated XLink attributes.
Refer to the descriptions of the individual animation elements for any restrictions on what types of elements can be targets of particular types of animations.
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: Specifying the animation target ([SMILANIM], section 3.1).
Reference the deprecated âxlink:hrefâ attribute and its handling as defined in SVG 2.
The following attribute identifies the target attribute or property for the given target element whose value changes over time.
Attribute definitions:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| attributeName | Name [EBNF] | (none) | no |
Specifies the name of the target property or attribute.
Unlike SMIL Animation, the attributeType attribute is not supported by SVG. SVG's animation elements follow the behavior defined for the auto value of attributeType. That is, when determining if âattributeNameâ corresponds to an attribute name or a CSS property name, the implementation must first search through the list of CSS properties for a matching property name. If no matching property is found, the implementation must search for a matching attribute on the target element.
When referencing an attribute, an XMLNS prefix may be used to indicate the XML namespace for the attribute. The prefix will be interpreted in the scope of the current (i.e., the referencing) animation element. Otherwise the implementation must use the default XML namespace for the target element.
Note that, as a result of the behavior, it is not possible to animate the list of coordinates specified by the âxâ and âyâ attributes on âtextâ and âtspanâ elements. This is because âxâ and âyâ are also CSS properties where they only accept a single length as a value.
Due to the complex mapping between characters and glyphs, using the list-based syntax for âxâ and âyâ to specify glyph positions does not scale well to anything beyond very simple Latin text and its use is discouraged. Authors who nevertheless wish to animate this list of coordinates may be able to achieve a comparable effect using the âdxâ and âdyâ attributes instead since these names to not overlap with CSS properties.
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: Specifying the animation target ([SMILANIM], section 3.1).
Example animns01 below shows a namespace prefix being resolved to a namespace name in the scope of the referencing element, and that namespace name being used (regardless of the prefix which happens to be used in the target scope) to identify the attribute being animated.
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<title>Demonstration of the resolution of namespaces for animation</title>
<!-- at the point of definition, the QName a:href resolves to the namespace
name "http://www.w3.org/1999/xlink" and the local name "href" -->
<g xmlns:a="http://www.w3.org/1999/xlink">
<animate attributeName="a:href" href="#foo" dur="2s" to="two.png" fill="freeze"/>
</g>
<!-- at the point of use, the namespace name "http://www.w3.org/1999/xlink"
happens to be bound to the namespace prefix 'b' -->
<g xmlns:b="http://www.w3.org/1999/xlink">
<image id="foo" b:href="one.png" x="35" y="50" width="410" height="160"/>
</g>
</svg>Paced animations assume a notion of distance between the various animation values defined by the âtoâ, âfromâ, âbyâ and âvaluesâ attributes. Distance is defined only for scalar types (such as <length>), colors and the subset of transformation types that are supported by âanimateTransformâ. In the list of distance functions below, Va and Vb represent the two values the distance between which is being calculated.
Since paced animation is intended to produce an animation with an even pace of change, it does not make sense to define distance functions for all data types. Distance can be usefully defined for types whose values are n-dimensional vectors (including scalars, which are 1-dimensional vectors). For example, a <length> value is a scalar value, and a <color> value is a 3-dimensional vector. Thus attributes of these types can have paced animation applied to them. On the other hand, a <dasharray> (as used by âstroke-dasharrayâ) is a list of scalars (1-dimensional vectors), and <points> (as used by the âpointsâ attribute on a âpolygonâ) is a list of 2-dimensional vectors. Therefore, these types do not have a distance function defined and cannot have paced animation applied to them.
The distance functions for types that support paced animation are as follows:
distance(Va, Vb) = |Va â Vb|
Examples: animating the âxâ attribute on a âtextâ, or the stroke-width property on a âcircleâ.
distance(Va, Vb) = sqrt((Va.red â Vb.red)2 + (Va.green â Vb.green)2 + (Va.blue â Vb.blue)2), where:
Each of the color component values is usually in the range [0, 1], where 0 represents none of that color component, and 1 represents the maximum amount of that color component, in the sRGB gamut [SRGB]. Since <color> values may specify colors outside of the sRGB gamut, these component values may lie outside the range [0, 1].
distance(Va, Vb) = sqrt((Va.tx â Vb.tx)2 + (Va.ty â Vb.ty)2), where:
Example (for all transform definition types): animating the transform attribute on a âgâ using âanimateTransformâ.
distance(Va, Vb) = sqrt((Va.sx â Vb.sx)2 + (Va.sy â Vb.sy)2), where:
Note that, as when specifying scale transformations in a <transform-list>, if the y component of the scale is omitted it is implicitly equal to the x component.
distance(Va, Vb) = sqrt((Va.angle â Vb.angle)2), where:
Since the distance function for rotations is not in terms of the rotation center point components, a paced animation that changes the rotation center point may not appear to have a paced movement when the animation is applied.
Distance functions for all other data types are not defined. If calcMode="paced" is used on an animation of an attribute or property whose type is not one of those listed above, the animation effect is undefined. SVG user agents may choose to perform the animation as if calcMode="linear", but this is not required. Authors are recommended not to specify paced animation on types not listed above.
The following attributes are the animation timing attributes. They are common to all animation elements and control the timing of the animation, including what causes the animation to start and end, whether the animation runs repeatedly, and whether to retain the end state the animation once the animation ends.
In the syntax specifications that follow, optional white space is indicated as "S", defined as follows:
S ::= (#x20 | #x9 | #xD | #xA)*
Align with whitespace used in CSS and SVG, adding #xC to S.
Attribute definitions:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| begin | begin-value-list | 0s | no |
Attribute syntax needs fixing.
Defines when the element should begin (i.e. become active).
The attribute value is a semicolon separated list of values.
begin or end to
identify whether to synchronize with the beginning or
active end of the referenced animation element.The begin of the animation will be determined by a "beginElement()" method call or a hyperlink targeted to the element.
The animation DOM methods are described in IDL.
Hyperlink-based timing is described in SMIL Animation: Hyperlinks and timing.
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'begin' attribute ([SMILANIM], section 3.2.1).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| dur | Clock-value | "media" | "indefinite" | indefinite | no |
Attribute syntax needs fixing.
Specifies the simple duration.
The attribute value can be one of the following:
If the animation does not have a âdurâ attribute, the simple duration is indefinite. Note that interpolation will not work if the simple duration is indefinite (although this may still be useful for âsetâ elements). Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'dur' attribute ([SMILANIM], section 3.2.1).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| end | end-value-list | (none) | no |
Attribute syntax needs fixing.
Defines an end value for the animation that can constrain the active duration. The attribute value is a semicolon separated list of values.
A value of 'indefinite' specifies that the end of the animation will be determined by an endElement method call (the animation DOM methods are described in IDL).
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'end' attribute ([SMILANIM], section 3.3.2).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| min | Clock-value | "media" | 0s | no |
| max | Clock-value | "media" | (none) | no |
Attribute syntax needs fixing.
The âminâ and âmaxâ attributes specify the minimum and maximum value of the active duration, respectively.
The attribute values can be either of the following:
Specifies the length of the minimum or maximum value of the active duration, measured in local time.
Value must be greater than 0.
The initial value for âminâ is '0' and there is no initial value for âmaxâ. In both cases, this does not constrain the active duration at all.
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for these attributes is the SMIL Animation specification. In particular, see SMIL Animation: The min and max attributes ([SMILANIM], section 3.3.3).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| restart | always | whenNotActive | never | always | no |
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'restart' attribute ([SMILANIM], section 3.3.7).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| repeatCount | <number> | indefinite | (none) | no |
Specifies the number of iterations of the animation function. It can have the following attribute values:
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'repeatCount' attribute ([SMILANIM], section 3.3.1).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| repeatDur | Clock-value | "indefinite" | (none) | no |
Attribute syntax needs fixing.
Specifies the total duration for repeat. It can have the following attribute values:
f(t).Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'repeatDur' attribute ([SMILANIM], section 3.3.1).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| fill | freeze | remove | remove | no |
This attribute can have the following values:
The animation effect is removed (no longer applied) when the active duration of the animation is over. After the active end of the animation, the animation no longer affects the target (unless the animation is restarted - see SMIL Animation: Restarting animation).
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'fill' attribute ([SMILANIM], section 3.3.5).
The SMIL Animation specification [SMILANIM] defines the detailed processing rules associated with the above attributes. Except for any SVG-specific rules explicitly mentioned in this specification, the SMIL Animation specification is the normative definition of the processing rules for the above attributes.
Clock values have the same syntax as in SMIL Animation specification [SMILANIM]. The grammar for clock values is repeated here:
Clock-val ::= Full-clock-val | Partial-clock-val
| Timecount-val
Full-clock-val ::= Hours ":" Minutes ":" Seconds ("." Fraction)?
Partial-clock-val ::= Minutes ":" Seconds ("." Fraction)?
Timecount-val ::= Timecount ("." Fraction)? (Metric)?
Metric ::= "h" | "min" | "s" | "ms"
Hours ::= DIGIT+; any positive number
Minutes ::= 2DIGIT; range from 00 to 59
Seconds ::= 2DIGIT; range from 00 to 59
Fraction ::= DIGIT+
Timecount ::= DIGIT+
2DIGIT ::= DIGIT DIGIT
DIGIT ::= [0-9]
For Timecount values, the default metric suffix is "s" (for seconds). No embedded white space is allowed in clock values, although leading and trailing white space characters will be ignored.
Clock values describe presentation time.
The following are examples of legal clock values:
 02:30:03   = 2 hours, 30 minutes and 3 seconds 50:00:10.25 = 50 hours, 10 seconds and 250 milliseconds
 02:33  = 2 minutes and 33 seconds 00:10.5 = 10.5 seconds = 10 seconds and 500 milliseconds 3.2h   = 3.2 hours = 3 hours and 12 minutes 45min  = 45 minutes 30s    = 30 seconds 5ms    = 5 milliseconds 12.467 = 12 seconds and 467 millisecondsFractional values are just (base 10) floating point definitions of seconds. Thus:
 00.5s    = 500 milliseconds
 00:00.005 = 5 milliseconds
The following attributes are the animation value attributes. They are common to elements âanimateâ, âanimateMotionâ and âanimateTransformâ. These attributes define the values that are assigned to the target attribute or property over time. The attributes below provide control over the relative timing of keyframes and the interpolation method between discrete values.
Attribute definitions:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| calcMode | discrete | linear | paced | spline | (none) | no |
Specifies the interpolation mode for the animation. This can take any of the following values. The default mode is 'linear', however if the attribute does not support linear interpolation (e.g. for strings), the âcalcModeâ attribute is ignored and discrete interpolation is used.
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'calcMode' attribute ([SMILANIM], section 3.2.3).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| values | (see below) | (none) | no |
The âvaluesâ attribute specifies a sequence of values to use over the course of the animation.
The attribute is parsed as follows:
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'values' attribute ([SMILANIM], section 3.2.2).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| keyTimes | <number> [; <number>]* ;? | (none) | no |
A semicolon-separated list of time values used to control the pacing of the animation. Each time in the list corresponds to a value in the âvaluesâ attribute list, and defines when the value is used in the animation function.
Each time value in the âkeyTimesâ list is specified as a floating point value between 0 and 1 (inclusive), representing a proportional offset into the simple duration of the animation element.
If the last semicolon separator is followed by either just white space or no more characters, ignore both the separator and the trailing white space.
For animations specified with a âvaluesâ list, the âkeyTimesâ attribute if specified must have exactly as many values as there are in the âvaluesâ attribute. For from/to/by animations, the âkeyTimesâ attribute if specified must have two values.
Each successive time value must be greater than or equal to the preceding time value.
The âkeyTimesâ list semantics depends upon the interpolation mode:
If the interpolation mode is 'paced', the âkeyTimesâ attribute is ignored.
If there are any errors in the âkeyTimesâ specification (bad values, too many or too few values), the document fragment is in error (see error processing).
If the simple duration is indefinite, any âkeyTimesâ specification will be ignored.
Because paced animation interpolation is unspecified for some value types, authors are encouraged to use 'linear' animation interpolation with calculated âkeyTimesâ to achieve particular interpolation behavior for these types.
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'keyTimes' attribute ([SMILANIM], section 3.2.3).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| keySplines | <control-point> [; <control-point>]* ;? | (none) | no |
where:
<control-point> = <number> ,? <number> ,? <number> ,? <number>
A set of Bézier control points associated with the âkeyTimesâ list, defining a cubic Bézier function that controls interval pacing. The attribute value is a semicolon-separated list of control point descriptions.
If the last semicolon separator is followed by either just white space or no more characters, ignore both the separator and the trailing white space.
Each control point description is a set
of four values: x1 y1 x2 y2, describing the
Bézier control points for one time segment. Note:
SMIL
allows these values to be separated either by commas with
optional whitespace, or by whitespace alone. The
âkeyTimesâ values that define the associated
segment are the Bézier "anchor points", and the
âkeySplinesâ values are the control points.
Thus, there must be one fewer sets of control points than
there are âkeyTimesâ.
The values must all be in the range 0 to 1.
This attribute is ignored unless the âcalcModeâ is set to 'spline'.
If there are any errors in the âkeySplinesâ specification (bad values, too many or too few values), the document fragment is in error (see error processing).
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'keySplines' attribute ([SMILANIM], section 3.2.3).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| from, to, by | (see below) | (none) | no |
The âfromâ and âtoâ attributes specify the starting and ending value of the animation, while the âbyâ attribute specifies a relative offset value for the animation.
All three attributes must be parsed using the rules for parsing the attribute identified by the âhrefâ and âattributeNameâ attributes.
For example, if âhrefâ identified a âcircleâ element and âattributeNameâ is 'stroke-width', then the âfromâ, âtoâ or âbyâ attribute is parsed as a [<percentage> | <length>].
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for these attributes is the SMIL Animation specification. In particular, see SMIL Animation: Animation function values ([SMILANIM], section 3.2.2).
The SMIL Animation specification [SMILANIM] defines the detailed processing rules associated with the above attributes. Except for any SVG-specific rules explicitly mentioned in this specification, the SMIL Animation specification is the normative definition of the processing rules for the above attributes.
The animation values specified in the animation element must be legal values for the specified attribute. Leading and trailing white space, and white space before and after semicolon separators, will be ignored.
All values specified must be legal values for the specified attribute (as defined in the associated namespace). If any values are not legal, the document fragment is in error (see error processing).
If a list of values is used, the animation will apply the values in order over the course of the animation. If a list of âvaluesâ is specified, any âfromâ, âtoâ and âbyâ attribute values are ignored.
The processing rules for the variants of from/by/to animations are described in Animation function values with the following exception.
In order to provide behavior that is intuitive and consistent between discrete animations with an explicitly specified âfromâ attribute (e.g. "from-to animation") and those where the underlying value is used (e.g. "to animation"), the behavior of discrete to-animation in SVG deviates from the definition in SMIL Animation. As with a discrete from-to animation, a discrete to animation will set the underlying value for the first half of the simple duration (or, if a âkeyTimesâ list is provided, until the simple duration specified by the second value in the âkeyTimesâ list) and the âtoâ value for the remainder of the simple duration.
The following figure illustrates the interpretation of the âkeySplinesâ attribute. Each diagram illustrates the effect of âkeySplinesâ settings for a single interval (i.e. between the associated pairs of values in the âkeyTimesâ and âvaluesâ lists.). The horizontal axis can be thought of as the input value for the unit progress of interpolation within the interval - i.e. the pace with which interpolation proceeds along the given interval. The vertical axis is the resulting value for the unit progress, yielded by the function that the âkeySplinesâ attribute defines. Another way of describing this is that the horizontal axis is the input unit time for the interval, and the vertical axis is the output unit time. See also the section Timing and real-world clock times.
To illustrate the calculations, consider the simple example:
<animate dur="4s" values="10; 20" keyTimes="0; 1"
calcMode="spline" keySplines={as in table} />
Using the âkeySplinesâ values for each of the four cases above, the approximate interpolated values as the animation proceeds are:
| Value of âkeySplinesâ | Initial value | After 1s | After 2s | After 3s | Final value |
|---|---|---|---|---|---|
| 0 0 1 1 | 10.0 | 12.5 | 15.0 | 17.5 | 20.0 |
| .5 0 .5 1 | 10.0 | 11.0 | 15.0 | 19.0 | 20.0 |
| 0 .75 .25 1 | 10.0 | 18.0 | 19.3 | 19.8 | 20.0 |
| 1 0 .25 .25 | 10.0 | 10.1 | 10.6 | 16.9 | 20.0 |
For a formal definition of Bézier spline calculation, see [FOLEY-VANDAM], pp. 488-491.
It is frequently useful to define animation as an offset or delta to an attribute's value, rather than as absolute values.
A simple "grow" animation can increase the width of an object by 10 pixels:
<rect width="20px" ...>
<animate attributeName="width" from="0px" to="10px" dur="10s"
additive="sum"/>
</rect>
It is frequently useful for repeated animations to build upon the previous results, accumulating with each iteration.
The following example causes the rectangle to continue to grow with each repeat of the animation:
<rect width="20px" ...>
<animate attributeName="width" from="0px" to="10px" dur="10s"
additive="sum" accumulate="sum" repeatCount="5"/>
</rect>
At the end of the first repetition, the rectangle has a width of 30 pixels. At the end of the second repetition, the rectangle has a width of 40 pixels. At the end of the fifth repetition, the rectangle has a width of 70 pixels.
For more information about additive animations, see SMIL Animation: Additive animation. For more information on cumulative animations, see SMIL Animation: Controlling behavior of repeating animation - Cumulative animation.
The following attributes are the animation addition attributes, which are common to elements âanimateâ, âanimateMotionâ and âanimateTransformâ.
Attribute definitions:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| additive | replace | sum | replace | no |
Controls whether or not the animation is additive.
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'additive' attribute ([SMILANIM], section 3.3.6).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| accumulate | none | sum | none | no |
Controls whether or not the animation is cumulative.
This attribute is ignored if the target attribute value does not support addition, or if the animation element does not repeat.
Cumulative animation is not defined for "to animation".
This attribute will be ignored if the animation function is specified with only the âtoâ attribute.
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this attribute is the SMIL Animation specification. In particular, see SMIL Animation: 'accumulate' attribute ([SMILANIM], section 3.3.1).
SVG allows both attributes and properties to be animated. If a given attribute or property is inheritable by descendants, then animations on a parent element such as a âgâ element has the effect of propagating the attribute or property animation values to descendant elements as the animation proceeds; thus, descendant elements can inherit animated attributes and properties from their ancestors.
The âanimateâ element is used to animate a single attribute or property over time.
This example makes a rectangle repeatedly fade away over 5 seconds:
<rect>
<animate attributeName="opacity"
from="1" to="0" dur="5s" repeatCount="indefinite" />
</rect>
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this element is the SMIL Animation specification. In particular, see SMIL Animation: 'animate' element ([SMILANIM], section 4.1).
The color-interpolation property applies to color interpolations that result from animations using the âanimateâ element.
For a list of attributes and properties that can be animated using the âanimateâ element, see Elements, attributes and properties that can be animated.
The âsetâ element provides a simple means of just setting the value of an attribute for a specified duration. It supports all attribute types, including those that cannot reasonably be interpolated, such as string and boolean values. The âsetâ element is non-additive. The additive and accumulate attributes are not allowed, and will be ignored if specified.
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this element is the SMIL Animation specification. In particular, see SMIL Animation: 'set' element ([SMILANIM], section 4.2).
Attribute definitions:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| to | <value> | (none) | no |
For a list of attributes and properties that can be animated using the âsetâ element, see Elements, attributes and properties that can be animated.
The âanimateMotionâ element causes a referenced element to move along a motion path.
Except for any SVG-specific rules explicitly mentioned in this specification, the normative definition for this element is the SMIL Animation specification. In particular, see SMIL Animation: 'animateMotion' element ([SMILANIM], section 4.3).
Attribute definitions:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| calcMode | discrete | linear | paced | spline | paced | no |
Specifies the interpolation mode for the animation. Refer to general description of the âcalcModeâ attribute above. The only difference is that the default value for the âcalcModeâ for âanimateMotionâ is 'paced'. See SMIL Animation: 'calcMode' attribute for 'animateMotion'.
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| path | svg-path [EBNF] | (none) | no |
The motion path, expressed in the same format and interpreted the same way as the d geometric property for the âpathâ element. The effect of a motion path animation is to add a supplemental transformation matrix onto the CTM for the referenced object which causes a translation along the x- and y-axes of the current user coordinate system by the computed X and Y values computed over time.
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| keyPoints | <number> [; <number>]* ;? | (none) | no |
âkeyPointsâ takes a semicolon-separated list of floating point values between 0 and 1 and indicates how far along the motion path the object shall move at the moment in time specified by corresponding âkeyTimesâ value. Distance calculations use the user agent's distance along the path algorithm. Each progress value in the list corresponds to a value in the âkeyTimesâ attribute list.
If a list of âkeyPointsâ is specified, there must be exactly as many values in the âkeyPointsâ list as in the âkeyTimesâ list.
If the last semicolon separator is followed by either just white space or no more characters, ignore both the separator and the trailing white space.
If there are any errors in the âkeyPointsâ specification (bad values, too many or too few values), then the document is in error (see Error processing).
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| rotate | <number> | auto | auto-reverse | 0 | no |
The ârotateâ attribute post-multiplies a supplemental transformation matrix onto the CTM of the target element to apply a rotation transformation about the origin of the current user coordinate system. The rotation transformation is applied after the supplemental translation transformation that is computed due to the âpathâ attribute.
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| origin | default | default | no |
The âoriginâ attribute is defined in the SMIL Animation specification ([SMILANIM], section 4.3). It has no effect in SVG.
Attribute definitions:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| href | URL [URL] | (none) | no |
A URL reference to the âpathâ element or shape element which defines the motion path. Refer to the common handling defined for URL reference attributes and deprecated XLink attributes.
For âanimateMotionâ, the specified values for âfromâ, âbyâ, âtoâ and âvaluesâ consists of x, y coordinate pairs, with a single comma and/or white space separating the x coordinate from the y coordinate. For example, from="33,15" specifies an x coordinate value of 33 and a y coordinate value of 15.
If provided, the âvaluesâ attribute must consists of a list of x, y coordinate pairs. Coordinate values are separated by at least one white space character or a comma. Additional white space around the separator is allowed. For example, values="10,20;30,20;30,40" or values="10mm,20mm;30mm,20mm;30mm,40mm". Each coordinate represents a <length>. Attributes âfromâ, âbyâ, âtoâ and âvaluesâ specify a shape on the current canvas which represents the motion path.
Two options are available which allow definition of a motion path using any of SVG's path data commands:
Note that SVG's path data commands can only contain values in local coordinate system, whereas âfromâ, âbyâ, âtoâ and âvaluesâ can specify coordinates in local coordinate system or using unit identifiers. See Units.
The various (x,y) points of the shape provide a supplemental transformation matrix onto the CTM for the referenced object which causes a translation along the x- and y-axes of the current user coordinate system by the (x,y) values of the shape computed over time. Thus, the referenced object is translated over time by the offset of the motion path relative to the origin of the current user coordinate system. The supplemental transformation is applied on top of any transformations due to the target element's transform property or any animations on that attribute due to âanimateTransformâ elements on the target element.
The âadditiveâ and âaccumulateâ attributes apply to âanimateMotionâ elements. Multiple âanimateMotionâ elements all simultaneously referencing the same target element can be additive with respect to each other; however, the transformations which result from the âanimateMotionâ elements are always supplemental to any transformations due to the target element's transform property or any âanimateTransformâ elements.
The default calculation mode (âcalcModeâ) for âanimateMotionâ is "paced". This will produce constant velocity motion along the specified path. Note that while animateMotion elements can be additive, it is important to observe that the addition of two or more "paced" (constant velocity) animations might not result in a combined motion animation with constant velocity.
When a path is combined with "discrete", "linear" or "spline" âcalcModeâ settings, and if attribute âkeyPointsâ is not provided, the number of values is defined to be the number of points defined by the path, unless there are "move to" commands within the path. A "move to" command within the path (i.e. other than at the beginning of the path description) A "move to" command does not count as an additional point when dividing up the duration, or when associating âkeyTimesâ, âkeySplinesâ and âkeyPointsâ values. When a path is combined with a "paced" âcalcModeâ setting, all "move to" commands are considered to have 0 length (i.e. they always happen instantaneously), and is not considered in computing the pacing.
For more flexibility in controlling the velocity along the motion path, the âkeyPointsâ attribute provides the ability to specify the progress along the motion path for each of the âkeyTimesâ specified values. If specified, âkeyPointsâ causes âkeyTimesâ to apply to the values in âkeyPointsâ rather than the points specified in the âvaluesâ attribute array or the points on the âpathâ attribute.
The override rules for âanimateMotionâ are as follows. Regarding the definition of the motion path, the âmpathâ element overrides the âpathâ attribute, which overrides âvaluesâ, which overrides âfromâ, âbyâ and âtoâ. Regarding determining the points which correspond to the âkeyTimesâ attributes, the âkeyPointsâ attribute overrides âpathâ, which overrides âvaluesâ, which overrides âfromâ, âbyâ and âtoâ.
At any time t within a motion path animation of duration dur, the computed coordinate (x,y) along the motion path is determined by finding the point (x,y) which is t/dur distance along the motion path using the user agent's distance along the path algorithm.
The following example demonstrates the supplemental transformation matrices that are computed during a motion path animation.
Example animMotion01 shows a triangle moving along a motion path.
<?xml version="1.0" standalone="no"?>
<svg width="5cm" height="3cm" viewBox="0 0 500 300"
xmlns="http://www.w3.org/2000/svg">
<desc>Example animMotion01 - demonstrate motion animation computations</desc>
<rect x="1" y="1" width="498" height="298"
fill="none" stroke="blue" stroke-width="2" />
<!-- Draw the outline of the motion path in blue, along
with three small circles at the start, middle and end. -->
<path id="path1" d="M100,250 C 100,50 400,50 400,250"
fill="none" stroke="blue" stroke-width="7.06" />
<circle cx="100" cy="250" r="17.64" fill="blue" />
<circle cx="250" cy="100" r="17.64" fill="blue" />
<circle cx="400" cy="250" r="17.64" fill="blue" />
<!-- Here is a triangle which will be moved about the motion path.
It is defined with an upright orientation with the base of
the triangle centered horizontally just above the origin. -->
<path d="M-25,-12.5 L25,-12.5 L 0,-87.5 z"
fill="yellow" stroke="red" stroke-width="7.06" >
<!-- Define the motion path animation -->
<animateMotion dur="6s" repeatCount="indefinite" rotate="auto" >
<mpath href="#path1"/>
</animateMotion>
</path>
</svg>
![]() At zero seconds |
At three seconds |
At six seconds |
View this example as SVG (SVG-enabled browsers only)
The following table shows the supplemental transformation matrices that are applied to achieve the effect of the motion path animation.
| After 0s | After 3s | After 6s | |
|---|---|---|---|
| Supplemental transform due to movement along motion path | translate(100,250) | translate(250,100) | translate(400,250) |
| Supplemental transform due to rotate="auto" | rotate(-90) | rotate(0) | rotate(90) |
For a list of elements that can be animated using the âanimateMotionâ element, see Elements, attributes and properties that can be animated.
The âanimateTransformâ element animates a transformation attribute on a target element, thereby allowing animations to control translation, scaling, rotation and/or skewing.
This section should talk about the transform property.
Attribute definitions:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| type | translate | scale | rotate | skewX | skewY | translate | no |
Indicates the type of transformation which is to have its values change over time.
The âfromâ, âbyâ and âtoâ attributes take a value expressed using the same syntax that is available for the given transformation type:
(See The âtransformâ property.)
The âvaluesâ attribute for the âanimateTransformâ element consists of a semicolon-separated list of values, where each individual value is expressed as described above for âfromâ, âbyâ and âtoâ.
The animation effect for âanimateTransformâ is post-multiplied to the underlying value for additive âanimateTransformâ animations (see below) instead of added to the underlying value, due to the specific behavior of âanimateTransformâ.
From-to, from-by and by animations are defined in SMIL to be equivalent to a corresponding values animation. See the Animation function values section of SMIL Animation ([SMILANIM], section 3.2.2). However, to animations are a mixture of additive and non-additive behavior, as described in the How from, to and by attributes affect additive behavior section of SMIL Animation ([SMILANIM], section 3.3.6). To animations provide specific functionality to get a smooth change from the underlying value to the âtoâ attribute value, which conflicts mathematically with the requirement for additive transform animations to be post-multiplied. As a consequence, in SVG 1.1 the behavior of to animations for âanimateTransformâ is undefined. Authors are suggested to use from-to, from-by, by or values animations to achieve any desired transform animation.
If âcalcModeâ has the value 'paced', then the "distance" for the transformation is calculated as further described in Paced animations and complex types.
When an animation is active, the effect of non-additive âanimateTransformâ (i.e., additive="replace") is to replace the given attribute's value with the transformation defined by the âanimateTransformâ. The effect of additive (i.e., additive="sum") is to post-multiply the transformation matrix corresponding to the transformation defined by this âanimateTransformâ.
To illustrate:
<rect transform="skewX(30)"...>
<animateTransform attributeName="transform"
type="rotate" from="0" to="90" dur="5s"
additive="replace" fill="freeze"/>
<animateTransform attributeName="transform"
type="scale" from="1" to="2" dur="5s"
additive="replace" fill="freeze"/>
</rect>
In the code snippet above, because the both animations have additive="replace", the first animation overrides the transformation on the rectangle itself and the second animation overrides the transformation from the first animation; therefore, at time 5 seconds, the visual result of the above two animations would be equivalent to the following static rectangle:
<rect transform="scale(2)" ... />
<rect transform="skewX(30)"...>
<animateTransform attributeName="transform"
type="rotate" from="0" to="90" dur="5s"
additive="sum" fill="freeze"/>
<animateTransform attributeName="transform"
type="scale" from="1" to="2" dur="5s"
additive="sum" fill="freeze"/>
</rect>
In this code snippet, because the both animations have additive="sum", the first animation post-multiplies its transformation to any transformations on the rectangle itself and the second animation post-multiplies its transformation to any transformation from the first animation; therefore, at time 5 seconds, the visual result of the above two animations would be equivalent to the following static rectangle:
<rect transform="skewX(30) rotate(90) scale(2)" ... />
The zero value used when performing a by animation with type="scale" is indeed 0. Thus, performing the following animation causes the rectangle to be invisible at time 0s (since the animated transform list value is 'scale(0)'), and be scaled back to its original size at time 5s (since the animated transform list value is 'scale(1)'):
<rect width="100" height="100">
<animateTransform attributeName="transform"
type="scale" by="1" dur="5s" fill="freeze"/>
</rect>
When a transform animation has accumulate='sum', the accumulation that occurs for each completed repetition of the animation is computed on the values specified in the âanimateTransformâ element's animation value attributes (i.e., âvaluesâ, âfromâ, âtoâ and âbyâ) and not on the transformation matrix that these values represent.
For example, in the following code snippet, 3 is added to the scale value at the start of each repetition:
<rect width="100" height="100">
<animateTransform attributeName="transform"
type="scale" from="2" to="3" repeatCount="3" dur="4s"
fill="freeze"/>
</rect>
The following graph and table shows the animated transform value on the ârectâ over the course of the animation:
![]() |
|
Transform item types that can have multiple values â 'translate', 'scale' and 'rotate' â are treated as vectors and accumulation is performed with vector addition. Optional values that are omitted are taken to have their usual implied value: 1 for the <sy> component of a 'scale' and 0 for the <tx> component of a 'translate' and the <cx cy> components of a 'rotate'.
For example, consider the following code snippet, which has a cumulative transform animation of type 'rotate':
<rect width="100" height="100">
<animateTransform attributeName="transform"
type="rotate" from="0 30 40" to="10 30 40"
repeatCount="2" dur="1s" fill="freeze"/>
</rect>
At time 1 second, the animated value of transform on the ârectâ will jump from 'rotate(10 30 40)' to 'rotate(10 60 80)', because the effect of the accumulation is to take the value at the end of the first repetition, '10 30 40', and add to it the value at simple duration t = 0s, which is '0 30 40'.
For a list of attributes and properties that can be animated using the âanimateTransformâ element, see Elements, attributes and properties that can be animated.
The following lists all of the elements which can be animated by an âanimateMotionâ element:
Each attribute or property within this specification indicates whether or not it can be animated by SVG's animation elements. Animatable attributes and properties are designated as follows:
Animatable: yes.
whereas attributes and properties that cannot be animated are designated:
Animatable: no.
Some properties are defined as being animatable but only for non-additive animations:
Animatable: yes (non-additive).
SVG has a number of different data types used for its various supported attributes and properties. For those attributes and properties that can be animated, the following table indicates which animation elements can be used to animate each of the basic data types. If a given attribute or property can take values of keywords (which are not additive) or numeric values (which are additive), then additive animations are possible if the subsequent animation uses a numeric value even if the base animation uses a keyword value; however, if the subsequent animation uses a keyword value, additive animation is not possible.
| Data type | Additive? | âanimateâ | âsetâ | âanimateTransformâ | Notes |
|---|---|---|---|---|---|
| <angle> | yes | yes | yes | no | Â |
| <color> | yes | yes | yes | no | Only additive if each value can be converted to an RGB color. |
| <frequency> | no | no | no | no | Â |
| <integer> | yes | yes | yes | no | Â |
| <length> | yes | yes | yes | no | Â |
| <number> | yes | yes | yes | no | Â |
| <paint> | yes | yes | yes | no | Only additive if each value can be converted to an RGB color. |
| <percentage> | yes | yes | yes | no | Â |
| <time> | no | no | no | no | Â |
| URL | no | yes | yes | no | Â |
| All other data types used in animatable attributes and properties | no | yes | yes | no | Â |
Any deviation from the above table or other special note about the animation capabilities of a particular attribute or property is included in the section of the specification where the given attribute or property is defined.
Example dom01 shows a simple animation using the DOM.
<?xml version="1.0" standalone="no"?>
<svg width="4cm" height="2cm" viewBox="0 0 400 200"
xmlns="http://www.w3.org/2000/svg"
onload="StartAnimation(evt)">
<script type="application/ecmascript"><![CDATA[
var timevalue = 0;
var timer_increment = 50;
var max_time = 5000;
var text_element;
function StartAnimation(evt) {
text_element = evt.target.ownerDocument.getElementById("TextElement");
ShowAndGrowElement();
}
function ShowAndGrowElement() {
timevalue = timevalue + timer_increment;
if (timevalue > max_time)
return;
// Scale the text string gradually until it is 20 times larger
scalefactor = (timevalue * 20.) / max_time;
text_element.setAttribute("transform", "scale(" + scalefactor + ")");
// Make the string more opaque
opacityfactor = timevalue / max_time;
text_element.setAttribute("opacity", opacityfactor);
// Call ShowAndGrowElement again <timer_increment> milliseconds later.
setTimeout("ShowAndGrowElement()", timer_increment)
}
window.ShowAndGrowElement = ShowAndGrowElement
]]></script>
<rect x="1" y="1" width="398" height="198"
fill="none" stroke="blue" stroke-width="2"/>
<g transform="translate(50,150)" fill="red" font-size="7">
<text id="TextElement">SVG</text>
</g>
</svg>
At zero seconds |
At 2.5 seconds |
At five seconds |
View this example as SVG (SVG-enabled browsers only)
The above SVG file contains a single graphics element, a text string that says "SVG". The animation loops for 5 seconds. The text string starts out small and transparent and grows to be large and opaque. Here is an explanation of how this example works:
StartAnimation.StartAnimation()
function is only called once to give a value to global
variable text_element and to make the initial
call to ShowAndGrowElement().
ShowAndGrowElement() is called every 50
milliseconds and resets the transform and
âstyleâ attributes on the text element to new
values each time it is called. At the end of
ShowAndGrowElement, the function tells the
ECMAScript engine to call itself again after 50 more
milliseconds.If scripts are modifying the same attributes or properties that are being animated by SVG's animation elements, the scripts modify the base value for the animation. If a base value is modified while an animation element is animating the corresponding attribute or property, the animations are required to adjust dynamically to the new base value.
If a script is modifying a property on the override style sheet at the same time that an animation element is animating that property, the result is implementation-dependent; thus, it is recommended that this be avoided.
| SVG 2 Requirement: | Should support the playbackorder attribute to inform UA to not display controls to seek backwards. |
|---|---|
| Resolution: | Support the playbackorder attribute. |
| Purpose: | To inform UA to not display controls to seek backwards. |
| Owner: | Cyril |
| SVG 2 Requirement: | Support a means for having SMIL animations start before their time container has fully loaded. |
|---|---|
| Resolution: | Timeline control. |
| Purpose: | To start animations before the SVG document is fully loaded (useful for large SVG documents). |
| Owner: | Cyril |
Attribute definitions:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| playbackorder | forwardonly | all | all | no |
Indicates whether it is possible to seek backwards in the document. In earlier versions of SVG there was no need to put restrictions on the direction of seeking but with the newly introduced facilities for long-running documents there is sometimes a need to restrict this.
If âplaybackorderâ is set to 'forwardonly', the content will likely contain scripts that destroy resources, thus seeking back in the document fragment's timeline may result in missing content. If âplaybackorderâ is 'forwardonly', the content should not provide a way, through hyperlinking or script, of seeking backwards in the timeline. Similarly the UA should disable any controls it may provide in the user interface for seeking backwards. Content with playbackorder="forwardonly" that provides a mechanism for seeking backwards in time may result in undefined behavior or a document that is in error.
Can't we define this so that there is no undefined behavior?
Attribute values have the following meanings:
| Name | Value | Initial value | Animatable |
|---|---|---|---|
| timelinebegin | loadend | loadbegin | loadend | no |
Controls the initialization of the timeline for the SVG document fragment.
The outermost svg element of an SVG document fragment defines a timeline. Absolute times used by animation elements in an SVG document fragment are relative to the document fragment's timeline.
By default, the timeline is initialized when the document
fragment's load
event is fired but for progressively loaded animations, the author may set
this attribute to 'loadend', thus allowing
the timeline to begin as the document loads, rather than waiting until the
complete document is loaded.
Attribute values have the following meanings:
load event for
the outermost svg element is triggered.
Below are the DOM interfaces for the elements defined in this chapter. In addition, TimeEvent, which is from SMIL Animation, is included here for easy reference.
The TimeEvent interface, defined in SMIL Animation: Supported interfaces, provides specific contextual information associated with Time events.
The different types of events that can occur are:
[Exposed=Window]
interface TimeEvent : Event {
readonly attribute WindowProxy? view;
readonly attribute long detail;
undefined initTimeEvent(DOMString typeArg, optional Window? viewArg = null, optional long detailArg = 0);
};
document.createEvent(). This
method may only be called before the TimeEvent has been dispatched
via the dispatchEvent method, though it may be called multiple times
during that phase if necessary. If called multiple times, the final
invocation takes precedence.The SVGAnimationElement interface is the base interface for all of the animation element interfaces: SVGAnimateElement, SVGSetElement, SVGAnimateMotionElement and SVGAnimateTransformElement.
Unlike other SVG DOM interfaces, the SVG DOM does not specify
convenience DOM properties corresponding to the various language
attributes on SVG's animation elements. Specification of these
convenience properties in a way that will be compatible with future
versions of SMIL Animation is expected in a future version of SVG. The
current method for accessing and modifying the attributes on the
animation elements is to use the standard getAttribute,
setAttribute, getAttributeNS and
setAttributeNS defined in
DOM4
[DOM4].
SMIL Animation supports several methods for controlling the behavior of
animation: beginElement(), beginElementAt(),
endElement() and endElementAt(). These methods
are used to begin and end the active duration of an element. Authors can
(but are not required to) declare the timing to respond to the DOM using
the following syntax:
<animate begin="indefinite" end="indefinite" .../>
If a DOM method call is made to begin or end the element (using
beginElement(), beginElementAt(),
endElement() or endElementAt()), each method call
creates a single instance time (in the appropriate instance times list).
These times are then interpreted as part of the semantics of lists of
times, as described in
Evaluation of begin and end time lists.
beginElement() or
endElement() call is the current presentation time at the
time of the DOM method call.beginElementAt() or
endElementAt() call is the current presentation time at the
time of the DOM method call, plus or minus the specified offset.beginElement() is subject to the ârestartâ
attribute in the same manner that event-based begin timing is. Refer
also to SMIL Animation: Restarting animation
([SMILANIM], section 3.3.7).[Exposed=Window]
interface SVGAnimationElement : SVGElement {
readonly attribute SVGElement? targetElement;
attribute EventHandler onbegin;
attribute EventHandler onend;
attribute EventHandler onrepeat;
float getStartTime();
float getCurrentTime();
float getSimpleDuration();
undefined beginElement();
undefined beginElementAt(float offset);
undefined endElement();
undefined endElementAt(float offset);
};
SVGAnimationElement includes SVGTests;
beginElementAt(0).endElementAt(0).The SVGAnimateElement interface corresponds to the âanimateâ element.
Object-oriented access to the attributes of the âanimateâ element via the SVG DOM is not available.
[Exposed=Window]
interface SVGAnimateElement : SVGAnimationElement {
};
The SVGSetElement interface corresponds to the âsetâ element.
Object-oriented access to the attributes of the âsetâ element via the SVG DOM is not available.
[Exposed=Window]
interface SVGSetElement : SVGAnimationElement {
};
The SVGAnimateMotionElement interface corresponds to the âanimateMotionâ element.
Object-oriented access to the attributes of the âanimateMotionâ element via the SVG DOM is not available.
[Exposed=Window]
interface SVGAnimateMotionElement : SVGAnimationElement {
};
The SVGMPathElement interface corresponds to the âmpathâ element.
[Exposed=Window]
interface SVGMPathElement : SVGElement {
};
SVGMPathElement includes SVGURIReference;
The SVGAnimateTransformElement interface corresponds to the âanimateTransformâ element.
Object-oriented access to the attributes of the âanimateTransformâ element via the SVG DOM is not available.
[Exposed=Window]
interface SVGAnimateTransformElement : SVGAnimationElement {
};
partial interface SVGSVGElement {
undefined pauseAnimations();
undefined unpauseAnimations();
boolean animationsPaused();
float getCurrentTime();
undefined setCurrentTime(float seconds);
};
The pauseAnimations and unpauseAnimations methods are used to pause and unpause all of the animations within the SVG document fragment.
When pauseAnimations() is called, the following steps are run:
When unpauseAnimations() is called, the following steps are run:
The pauseAnimations and unpauseAnimations methods only affect animations defined using SVG's animation elements. They have no effect on CSS Transitions or Animations [CSS3ANIMATIONS][CSS3TRANSITIONS] or animations created using script.
The animationsPaused method returns whether SVG animation timeline has been paused. When animationsPaused() is called, true is returned if the timeline that controls SVG animations for the SVG document fragment that the âsvgâ element in has been paused by pauseAnimations; otherwise, false is returned.
The getCurrentTime and setCurrentTime methods are used to get and set the current time of the timeline that controls SVG animations. When getCurrentTime() is called, the following steps are run:
This is the case, for example, if the outermost svg element has its âtimelinebeginâ attribute set to 'loadend' and the load event has not yet fired.
When setCurrentTime(seconds) is called, the following steps are run: