第4章:基本数据类型和接口

4.1. 定义

初始值

属性或属性的初始值是未指定该属性或属性时使用的值,或当其具有 无效值时使用的值。 该值用于渲染、计算 动画值时,以及通过 DOM 接口访问该属性或属性时。

无效值
在样式表中或在属性中指定的无效值,指的是 根据定义属性值的语法,不被允许的值,或者虽然语法允许但在文本中被禁止的值。 带有无效值的 CSS 声明将被忽略;请参见 声明 和属性 ([CSS2],第 4.1.8 节)。

4.2. 属性语法

在本规范中,属性通过属性定义表进行定义,格式如下:

名称 初始值 可动画
exampleattr <length> | none none yes

值列中是属性语法的描述。描述属性语法的方法有六种:

  1. 使用 CSS 值定义语法 [css-values]。 这是定义本规范中大多数属性语法所使用的符号,并且是默认格式。
  2. 引用本规范或其他规范中定义的 EBNF 符号 [xml]。 对于外部定义,值列中会显示 [EBNF]
  3. 引用其他规范中定义的 ABNF 符号 [rfc5234]。 值列中会显示 [ABNF]
  4. 作为由 URL 标准 定义的 URL [URL]。 值列中会显示 [URL]
  5. 作为由 HTML 标准 定义的类型 [HTML]。 值列中会显示 [HTML]
  6. 在属性定义表下的文字中。这通过值列中的文本“(见下文)”来指示。
SVG 2 要求: 考虑放宽展示属性值的大小写敏感性。
解决方案: 我们将使属性值不区分大小写。
目的: 使展示属性语法解析与相应 CSS 属性的解析保持一致。
负责人: Cameron (ACTION-3276)
状态: 完成

当使用 CSS 值定义语法解析 展示属性 时,步骤如下:

  1. value 为属性的值。
  2. grammar 为属性定义表的值列中的语法。
  3. <length> 的所有实例替换为 [<length> | <number>]。
  4. <length-percentage> 的所有实例替换为 [<length-percentage> | <number>]。
  5. <angle> 的所有实例替换为 [<angle> | <number>]。
  6. 返回 使用 grammar 解析 value 的结果

插入 <number> 符号允许在展示属性中使用 无单位长度和角度,而在相应的属性值中不允许使用。

请注意,所有 展示属性, 由于它们是通过引用相应的 CSS 属性定义的,因此使用 CSS 值定义语法进行定义。

当任何其他使用 CSS 值定义语法定义的属性被解析时,通过 根据属性定义表中给出的语法解析 属性值

请注意,这允许在此类属性中使用 CSS 注释和转义。例如,值 '10\px/**/' 将在 ‘x’ 的展示属性中成功解析为 '10px'

当解析定义为 URL 的属性时,通过调用 URL 解析器,将属性的值作为 input 并将文档的 URL 作为 base [URL]。

初始值列提供了属性的 初始值。 当属性未能根据指定的 CSS 值定义语法、ABNF 或 EBNF 语法解析,或者根据 URL 标准解析 或通过描述如何解析属性的文字指示失败时,假定该属性已指定为给定的 初始值

展示属性的初始值是其相应属性的初始值。由于在 无效值 用于 展示属性 时将被视为指定了初始值,因此该值可以覆盖来自低优先级样式表规则(如来自用户代理样式表的规则)的值。

例如,尽管用户代理样式表将 svg 元素的 overflow 属性的值设置为 hidden, 指定无效的展示属性如 overflow="invalid" 将导致规则将 overflow 设置为其 初始值 visible

可动画列指示该属性是否可以使用 动画元素,如在 SVG 动画模块中定义的那样进行动画处理。

4.2.1. 实数精度

除非另有说明,SVG 属性中的数值和对 SVG 元素有影响的属性必须支持主机架构支持的所有有限单精度值。

建议在坐标系统转换等操作中执行更高精度的浮点存储和计算,以提供最佳可能的精度并防止舍入错误。

符合规范的 SVG 观看者需根据其符合性类别进行数值计算,如符合性标准中所述。

4.2.2. 限制在特定范围内的值

某些数值属性和属性值具有限制范围。其他值将受到设备能力的限制。如果没有其他说明,用户代理应尽可能晚地推迟任何超出范围的错误检查。这对于设备限制特别重要,因为复合操作可能产生超出范围的中间值,但最终值在范围内。

4.3. SVG DOM 概述

符合SVG 观看者SVG 解释器,支持脚本执行的,必须实现本规范中定义的 SVG DOM 接口,并在本节中列出具体要求和依赖关系。

SVG 2 要求: 改进 DOM。
解决方案: 我们将一般性地改进 SVG 2 的 SVG DOM。
目的: 通过使 SVG DOM 不那么面向 Java,帮助作者使用 SVG DOM。
负责人: Cameron (ACTION-3273)
备注: 请参见SVG 2 DOM Wiki 页面。
SVG 2 要求: 改进 SVG 路径 DOM API。
解决方案: 我们将在 SVG 2 中改进 SVG 路径 DOM API。
目的: 清理 SVGPathSegList 接口,并可能与 Canvas 共享 API。
负责人: Cameron(无行动)

4.3.1. SVG DOM 支持的依赖关系

SVG DOM 是根据Web IDL接口定义的。本规范中的所有 IDL 片段必须解释为符合规范的 IDL 片段,如 Web IDL 规范所述。[WebIDL]

SVG DOM 基于多个 DOM 规范构建。特别是:

4.3.2. 命名约定

SVG DOM 遵循与 HTML 和 DOM 标准类似的命名约定 ([HTML], [DOM]).

所有名称定义为一个或多个英文单词连接在一起形成一个字符串。属性或方法名称以小写字母开头,随后的每个单词以大写字母开头。例如,返回文档元信息(如文件创建日期)的属性可能命名为 "fileDateCreated"。

本规范中定义的接口名称几乎都以 "SVG" 开头。表示 SVG 命名空间元素的 DOM Element 对象的接口遵循格式SVGElementNameElement,其中ElementName是元素的标签名,其首字母大写。因此,SVGRadialGradientElement 是一个radialGradient元素的接口。

此命名约定的一个例外是SVGSVGElement,其中整个标签名均为大写。

4.3.3. SVG DOM 中的元素

任何被要求支持 SVG DOM 的 SVG 软件必须增强为SVG 文档片段创建的 DOM 元素,如下所示:

接口SVGUnknownElement处于“风险”状态。

‘rect’元素中,识别到SVGRectElement接口。这意味着每个命名空间 URI 为 "http://www.w3.org/2000/svg" 并且本地名称为 "rect" 的Element对象必须也实现SVGRectElement

4.3.4. 在 DOM 中反映内容属性

许多 SVG DOM 属性(IDL 属性)反映对应元素上的内容属性或属性,意味着内容和 IDL 属性表示相同的底层数据。例如,SVGAnimatedLength中的rySVGRectElement中反映了与相关联的rect元素上的ry呈现属性。

这种反映方式取决于 IDL 属性的类型:

这种关系是实时的,当属性或其反映的属性被修改时,必须同步值(遵循同步反映值的规则)。

如果属性未在文档标记中显式指定,则反映的对象在访问时仍会初始化为属性的初始值。如果属性的初始值为(none),则对象按照反射空初始值中定义的方式初始化。此新构造的对象在第一次修改之前不会在元素上生成属性。对相应属性的修改会立即反映在对象中。

如果访问lineElement.x1.baseVal(其中lineElementSVGLineElement的实例)且x1属性未在文档中指定,则返回的SVGLength对象将表示值0 用户单位,因为该属性的初始值为0

4.3.5. 同步反射值

每当一个反射的内容属性的基本值变化时, 反射对象必须在值改变后立即被同步,具体步骤如下:

  1. 如果反射对象是一个 列表接口 对象, 则执行 同步列表接口对象 的步骤。
  2. 否则,将对象的值更新为反射内容属性的基本值(如果属性的初始值 不存在或无效,则使用初始值)。

    例如,这将更新一个SVGLength 对象。

当一个 反射 内容属性需要被 重新序列化时,可能使用特定值,必须执行以下步骤:

  1. value 为给定的特定值,或 如果未提供特定值,则为内容属性的反射 IDL 属性的值。
  2. 根据 value 的类型:
    SVGAnimatedBoolean
    SVGAnimatedNumber
    SVGAnimatedLength
    SVGAnimatedAngle
    SVGAnimatedRect
    SVGAnimatedString
    SVGAnimatedNumberList
    SVGAnimatedLengthList
    SVGAnimatedTransformList
    使用 value 的 baseVal 成员重新序列化内容属性。
    SVGAnimatedEnumeration
    1. numbervalue 的 baseVal 成员的值。
    2. keyword 为内容属性与 number 对应的关键字 值,或者如果 number 为 0 则为空字符串。

      这意味着如果枚举值被设置为“未知”值,则内容属性将被 设置为空字符串。

    3. 将内容属性设置为 keyword
    boolean
    如果 value 为真,则将内容属性设置为“true”,否则为“false”。
    float
    double
    将内容属性设置为一个实现特定字符串,该字符串如果使用 CSS 语法解析为 <number>, 将返回最接近 value 的数值,给定实现支持的 实数精度
    SVGLength
    将内容属性设置为从获取 valuevalueAsString 成员返回的值。
    SVGAngle
    将内容属性设置为从获取 valuevalueAsString 成员返回的值。
    DOMRect
    1. components 为四个值的列表,分别是 valuexywidthheight 成员的值。
    2. serialized components 为四个字符串的列表, 每个字符串是一个实现特定字符串,如果使用 CSS 语法解析为 <number>, 将返回与 components 中对应值最接近的数值,给定实现支持的 实数精度
    3. 将内容属性设置为由 serialized components 中的字符串组成的字符串,字符串之间用单个 U+0020 空格字符分隔。
    DOMString
    将内容属性设置为 value
    SVGNumberList
    SVGLengthList
    SVGPointList
    SVGTransformList
    SVGStringList
    1. elementsvalue 中的值的列表。

      这些值将是 SVGNumberSVGLengthDOMPointSVGTransform 对象,或 DOMString 值, 具体取决于 value 的类型。

    2. serialized elements 为字符串列表,每个字符串是根据 elements 中对应值及其类型形成的:
      一个 SVGNumber 对象
      字符串是一个实现特定字符串,如果使用 CSS 语法解析为 <number>,将返回其值最接近的数值,给定实现支持的 实数精度
      一个 SVGLength 对象
      字符串是获取其 valueAsString 的值。
      一个 DOMPoint 对象
      字符串是获取其 toString 的值。
      一个 SVGTransform 对象
      字符串是获取其 toString 的值。
      一个 DOMString 值
      字符串为该 DOMString 值。
    3. 将内容属性设置为由 serialized elements 中的字符串组成的字符串,字符串之间用单个 U+0020 空格字符分隔。

4.3.6. 反射空初始值

当初始化一个反射空或 null 初始值的 SVG DOM 属性时, 该属性必须根据其数据类型进行初始化, 具体定义如下。 只有在没有显式值的情况下才会发生这种情况, 并且在属性定义表中的初始值为(none)

如果接口未列出,则表示 对象的初始化应使用接口包含的对象的值,例如, 一个 SVGAnimatedString 由两个 DOMString 成员组成, 而一个 DOMRect 由多个 double 组成。

DOMString
初始化为空字符串 ("").
float
long
short
WebIDL 中定义的其他 数值类型
初始化为 0.
boolean
初始化为 false.
SVGLength
初始化为 0 用户单位 (SVG_LENGTHTYPE_NUMBER).
SVGLengthList
SVGNumberList
SVGPointList
SVGStringList
SVGTransformList
初始化为空列表.
SVGAngle
初始化为 0 以未指定单位 (SVG_ANGLETYPE_UNSPECIFIED).
SVGZoomAndPan
初始化为 0 (SVG_ZOOMANDPAN_UNKNOWN).
SVGPreserveAspectRatio
初始化为 'xMidYMid meet'.

如果访问 textElement.dx.baseVal (其中 textElementSVGTextElement 的实例) 并且 dx 属性在文档中未指定,则返回的 SVGLengthList 对象将为空。

4.3.7. 无效值

如果脚本将 反射 DOM 属性 设置为内容属性的 无效值(例如, 对于需要非负数的属性设置负数,或为枚举设置超出范围的值),除非 本规范另有说明,设置时不应引发异常,但给定的文档片段应被视为 技术上 出错,如在 错误处理中所述。

许多浏览器目前会对超出范围的枚举值抛出错误, 或明确将枚举设置为 UNKNOWN 值。 有关讨论,请参见 设置枚举 IDL 为无效值是否应抛出错误?

4.4. SVG 元素的 DOM 接口

4.4.1. 接口 SVGElement

所有与 SVG 语言中的元素直接对应的 SVG DOM 接口(例如,SVGPathElement 接口对应于 path 元素)都源自 SVGElement 接口。

CSSOM 规范 增强了 SVGElement 的样式 IDL 属性,因此 style 属性可以像 HTML 元素一样访问。

[Exposed=Window]
interface SVGElement : Element {

  [SameObject] readonly attribute SVGAnimatedString className;

  readonly attribute SVGSVGElement? ownerSVGElement;
  readonly attribute SVGElement? viewportElement;
};

SVGElement 包含 GlobalEventHandlers;
SVGElement 包含 DocumentAndElementEventHandlers;
SVGElement 包含 SVGElementInstance;
SVGElement 包含 HTMLOrSVGElement;

className IDL 属性 反射 class 属性。

该属性已被弃用,可能在将来的版本中移除。建议作者使用 Element.classList 替代。

className 属性在 SVGElement 上覆盖了 Element 上的相应属性,遵循 WebIDL 关于 继承 的规则。

ownerSVGElement IDL 属性 表示最近的祖先 svg 元素。获取 ownerSVGElement 时, 返回最近的祖先 svg 元素;如果当前 元素是 最外层 svg 元素,则返回 null。

viewportElement IDL 属性 表示为当前元素提供 SVG 视口的元素。获取 viewport 时, 返回建立 SVG 视口的最近祖先元素;如果当前 元素是 最外层 svg 元素,则返回 null。

4.4.2. 接口 SVGGraphicsElement

SVG 2 要求: 检测鼠标事件是否发生在形状的填充或描边上。
解决方案: SVG 2 将更容易检测鼠标事件是否发生在元素的描边或填充上。
目的: 允许作者在不必复制元素的情况下区分指针事件发生在元素的填充和描边上。
负责人: Cameron (ACTION-3279)
状态: 完成。

SVGGraphicsElement 接口 代表主要用于直接将图形渲染到组中的 SVG 元素。

dictionary SVGBoundingBoxOptions {
  boolean fill = true;
  boolean stroke = false;
  boolean markers = false;
  boolean clipped = false;
};

interface SVGGraphicsElement : SVGElement {
  [SameObject] readonly attribute SVGAnimatedTransformList transform;

  DOMRect getBBox(optional SVGBoundingBoxOptions options);
  DOMMatrix? getCTM();
  DOMMatrix? getScreenCTM();
};

SVGGraphicsElement 包含 SVGTests;

transform IDL 属性 反映 transform 属性的计算值及其 对应的 ‘transform’ 展示属性。

getBBox 方法用于 计算当前元素的边界框。当调用 getBBox(options) 方法时,将为当前元素调用 边界框算法fillstrokemarkersclipped 字典参数的成员 用于控制哪些部分包含在边界框中, 使用元素的用户坐标系统作为返回边界框的坐标系统。返回一个新创建的 DOMRect 对象,定义 计算出的边界框。

getCTM 方法用于 获取将当前元素的坐标系统转换到 其 SVG 视口的坐标系统的矩阵。当调用 getCTM() 时,将执行以下步骤:

  1. 如果当前元素不在文档中,则返回 null。
  2. ctm 为根据当前元素确定的矩阵:
    当前元素是 最外层 svg 元素
    ctm 是一个将 svg 的坐标空间(包括其 transform 属性) 转换到文档视口的坐标空间的矩阵。该矩阵包括 由 viewBoxpreserveAspectRatio 属性、transform 属性以及 任何由于 currentScalecurrentTranslate 属性对 SVGSVGElement 产生的变换。
    其他任何元素
    ctm 是一个将当前元素的坐标空间(包括其 transform 属性)转换到其最近的祖先 视口建立元素的坐标空间的矩阵(也包括其 transform 属性)。
  3. 返回一个新创建的 分离的 DOMMatrix 对象,表示与 ctm 相同的矩阵。

getScreenCTM 方法 用于获取将当前元素的坐标系统转换到 SVG 文档片段的 SVG 视口的坐标系统的矩阵。 当调用 getScreenCTM() 时,将执行以下步骤:

  1. 如果当前元素不在文档中,则返回 null。
  2. ctm 为将当前元素的坐标空间(包括其 transform 属性) 转换到文档视口的坐标空间的矩阵。

    这将包括:

  3. 返回一个新创建的 分离的 DOMMatrix 对象,表示与 ctm 相同的矩阵。

该方法本可以更恰当地命名为 getClientCTM,但出于历史原因,名称 getScreenCTM 被保留。

4.4.3. 接口 SVGGeometryElement

接口 SVGGeometryElement 代表渲染由几何定义的 SVG 元素,具有 等效路径, 并且可以填充和描边。 这包括路径和基本形状。

[Exposed=Window]
interface SVGGeometryElement : SVGGraphicsElement {
  [SameObject] readonly attribute SVGAnimatedNumber pathLength;

  boolean isPointInFill(optional DOMPointInit point);
  boolean isPointInStroke(optional DOMPointInit point);
  float getTotalLength();
  DOMPoint getPointAtLength(float distance);
};

isPointInFill 方法, 被调用时,如果传递给该方法的 point 在元素的坐标空间内位于预期路径内部, 则必须返回 true,路径的内部由 fill-rule 属性指示的环绕规则决定; 否则,必须返回 false。 在计算路径内部区域时,打开的子路径必须隐式关闭,而不影响实际的子路径。路径上的点必须视为在路径内部。 返回的值独立于任何视觉 CSS 属性,但 fill-rule 如果 point 上的 xy 属性为无限或 NaN, 则该方法必须返回 false。

isPointInFill 考虑元素的 fill-rule 属性指示的环绕规则, 即使该元素是 clipPath 元素的子元素。

isPointInFillisPointInPath 方法在 CanvasDrawPath 混合中尽可能对齐, 只要 SVG 上下文允许。

isPointInStroke 方法, 被调用时,如果传递给该方法的 point 在元素的坐标空间内位于应用的描边的轮廓路径内或上, 则必须返回 true;否则,必须返回 false。 轮廓路径必须考虑元素的描边属性 stroke-widthstroke-linecapstroke-linejoinstroke-miterlimitstroke-dasharraystroke-dashoffset。 返回的值独立于任何视觉 CSS 属性,但考虑了列出的描边属性。 如果 point 上的 xy 属性为无限或 NaN, 则该方法必须返回 false。

isPointInStrokeisPointInPath 方法在 CanvasDrawPath 混合中尽可能对齐, 只要 SVG 上下文允许。

pathLength IDL 属性 反映 pathLength 内容属性。

getTotalLength 方法 用于计算路径的长度。当调用 getTotalLength() 时,返回用户代理计算的路径总长度的值, 以用户单位为单位。

用户代理计算的路径长度不考虑 pathLength 属性。

getPointAtLength 方法 用于返回路径上给定距离处的点。当 getPointAtLength(distance) 被调用时,将执行以下步骤:

  1. length 为用户代理计算的路径总长度的值, 以用户单位为单位。

    getTotalLength 一样, 这不考虑 pathLength 属性。

  2. distance 限制在 [0, length] 范围内。
  3. 让 (x, y) 为路径上在 distance 处的点。
  4. 返回一个新创建的 独立 DOMPoint 对象 表示点 (x, y)。

4.5. 基本数据类型的 DOM 接口

4.5.1. 接口 SVGNumber

SVGNumber 接口主要用于表示 <number> 值,该值是SVGNumberList的一部分。 单个SVGNumber 对象也可以通过脚本创建。

一个SVGNumber 对象可以被指定为只读, 这意味着尝试修改该对象将导致异常被抛出,如下所述。 通过 animVal IDL 属性反映的SVGNumber 对象始终是只读

一个SVGNumber 对象 可以与特定元素关联。 关联元素用于确定如果对象反映 一个属性,则更新哪个元素的内容属性。除非另有描述,SVGNumber 对象不与任何元素关联。

每个SVGNumber 对象 以两种模式之一操作。它可以:

  1. 反映一个可动画属性的基础值的元素反映 (通过baseVal成员的 方法暴露),
  2. 分离,这适用于通过createSVGNumber创建的SVGNumber 对象。

SVGNumber 对象维护一个内部数字值, 被称为其

[Exposed=Window]
interface SVGNumber {
  attribute float value;
};

value IDL 属性表示该数字。在获取value时, 返回SVGNumber

在设置value时,执行以下步骤:

  1. 如果SVGNumber只读,则 抛出一个NoModificationAllowedError
  2. SVGNumber设置为分配给value 成员的值。
  3. 如果SVGNumber 反映一个基础值的元素反映属性, 则重新序列化反映的属性。

4.5.2. 接口 SVGLength

SVGLength 接口用于表示可以是 <length><percentage><number> 的值。

一个 SVGLength 对象可以被指定为 只读, 这意味着尝试修改该对象将导致抛出异常,如下所述。 SVGLength 对象通过 animVal IDL 属性反映的始终是 只读

一个 SVGLength 对象 可以与特定元素 关联,并被指定为 方向性: 水平、垂直或未指定。关联的元素和长度的方向性用于将百分比值解析为用户单位,并且也用于 确定如果对象 反射 属性时,更新哪个元素的内容属性。除非另有描述,一个 SVGLength 对象不与任何元素关联,并且 具有未指定的方向性。

每个 SVGLength 对象 在四种模式之一中操作。它可以:

  1. 反映基值反射 可动画属性 (通过 baseVal 成员 的方法进行暴露),
  2. 反映一个表现属性值 (例如通过 SVGRectElement.width.baseVal),
  3. 反映基值的元素反射 可动画属性(通过 baseVal 成员 的方法进行暴露),或者
  4. 被分离,这是通过 SVGLength 对象创建的 createSVGLength 的情况。

一个 SVGLength 对象维护一个内部 <length><percentage><number> 值,称为其

[Exposed=Window]
interface SVGLength {

  // Length Unit Types
  const unsigned short SVG_LENGTHTYPE_UNKNOWN = 0;
  const unsigned short SVG_LENGTHTYPE_NUMBER = 1;
  const unsigned short SVG_LENGTHTYPE_PERCENTAGE = 2;
  const unsigned short SVG_LENGTHTYPE_EMS = 3;
  const unsigned short SVG_LENGTHTYPE_EXS = 4;
  const unsigned short SVG_LENGTHTYPE_PX = 5;
  const unsigned short SVG_LENGTHTYPE_CM = 6;
  const unsigned short SVG_LENGTHTYPE_MM = 7;
  const unsigned short SVG_LENGTHTYPE_IN = 8;
  const unsigned short SVG_LENGTHTYPE_PT = 9;
  const unsigned short SVG_LENGTHTYPE_PC = 10;

  readonly attribute unsigned short unitType;
           attribute float value;
           attribute float valueInSpecifiedUnits;
           attribute DOMString valueAsString;

  void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits);
  void convertToSpecifiedUnits(unsigned short unitType);
};

SVGLength 上定义的数字长度单位类型常量用于表示 一个 SVGLength 的类型。 其含义如下:

常量 含义
SVG_LENGTHTYPE_NUMBER 一个无单位的 <number> 被解释为 px 的值。
SVG_LENGTHTYPE_PERCENTAGE 一个 <percentage>
SVG_LENGTHTYPE_EMS 一个具有 em 单位的 <length>
SVG_LENGTHTYPE_EXS 一个具有 ex 单位的 <length>
SVG_LENGTHTYPE_PX 一个具有 px 单位的 <length>
SVG_LENGTHTYPE_CM 一个具有 cm 单位的 <length>
SVG_LENGTHTYPE_MM 一个具有 mm 单位的 <length>
SVG_LENGTHTYPE_IN 一个具有 in 单位的 <length>
SVG_LENGTHTYPE_PT 一个具有 pt 单位的 <length>
SVG_LENGTHTYPE_PC 一个具有 pc 单位的 <length>
SVG_LENGTHTYPE_UNKNOWN 其他类型的值。

使用数字长度单位类型常量是一种反模式,不会为 SVGLength 支持的其他单位或长度类型引入新的常量值。 如果支持和使用其他类型的长度,SVGLength 使用 SVG_LENGTHTYPE_UNKNOWN 单位类型。 有关这些长度类型的其他属性如何操作的详细信息,请参见下文。

unitType IDL 属性表示 SVGLength 的类型。 在获取 unitType 时,将执行以下步骤:

  1. 如果 SVGLength 是无单位的 <number><percentage>,或者是具有 emexpxcmmminptpc 单位的 <length>,则返回上面长度单位类型表中的相应常量值。
  2. 否则,返回 SVG_LENGTHTYPE_UNKNOWN

    例如,对于一个具有 ch 单位的 <length> 或者具有非标量值(如 calc())的值,将返回 SVG_LENGTHTYPE_UNKNOWN

value IDL 属性表示 SVGLength,以用户单位表示。 在获取 value 时,将执行以下步骤:

  1. valueSVGLength
  2. 如果 value<number>,则返回该数字。
  3. viewport size 为根据 SVGLength相关元素方向性 来解析百分比的基础:
    没有 相关元素
    size 为 100
    相关元素 且水平方向 方向性
    size相关元素 的 SVG 视口的宽度
    相关元素 且垂直方向 方向性
    size相关元素 的 SVG 视口的高度
    相关元素 且方向性未指定
    size相关元素 的 SVG 视口对角线的长度(见 单位
  4. font size 为根据 SVGLength相关元素 来解析字体大小值的基础:
    没有 相关元素
    font sizefont-size 属性初始值的绝对长度
    相关元素
    size相关元素font-size 属性的计算值
  5. 返回将 value 转换为绝对长度的结果,使用 viewport sizefont size 作为百分比和字体大小的基础。 如果由于缺少 相关元素 而无法转换,则返回 0。

设置 value 时,将执行以下步骤:

  1. 如果 SVGLength 对象是 只读,则 抛出 NoModificationAllowedError
  2. value 为要分配给 value 的值。
  3. SVGLengthvalue 设置为一个 <number>,其值为 value
  4. 如果 SVGLength 反映了 反射的 属性的基本值, 反映了一个呈现属性,或 反映了反射属性的基本值的元素, 则 重新序列化 反射属性。

valueInSpecifiedUnits IDL 属性表示 SVGLengthvalue 的数值因子。 获取 valueInSpecifiedUnits 时,将执行以下步骤:

  1. valueSVGLengthvalue
  2. 如果 value 是一个 <number>,则返回 该数字。
  3. 否则,如果 value 是一个 <percentage> 或任何标量 <length> 值,则返回其单位之前的数值因子。
  4. 否则,返回 0。

    因此 valueInSpecifiedUnits 将对 '12%'12em 返回 12,但 对于非标量值,如 calc(12px + 5%),则返回 0。

设置 valueInSpecifiedUnits 时,将执行以下步骤:

  1. 如果 SVGLength 对象是 只读,则 抛出 NoModificationAllowedError
  2. value 为要分配给 valueInSpecifiedUnits 的值。
  3. 如果 SVGLengthvalue 是一个 <number>,则更新其值为 value
  4. 否则,如果 SVGLengthvalue 是一个 <percentage> 或标量值的 <length>, 则将其数值因子更新为 value
  5. 否则,SVGLengthvalue 是其他类型。将其设置为一个 <number> ,其值为 value
  6. 如果 SVGLength 反映了 反射的 属性的基本值或 反映了反射属性的基本值的元素, 则 重新序列化 反射属性。

valueAsString IDL 属性表示 SVGLengthvalue 作为字符串。 获取 valueAsString 时,将执行以下步骤:

  1. valueSVGLengthvalue
  2. string 为一个空字符串。
  3. 如果 value 是一个 <number><percentage> 或标量 <length> 值,则:
    1. factor 成为 value 的数值因子,如果它是一个 <percentage><length>,或者 value 本身是一个 <number>
    2. 将一个实现特定的字符串追加到 string,该字符串如果使用 CSS 语法解析为 <number>,则会返回与 factor 最接近的数值,考虑实现支持的 实数精度
    3. 如果 value 是一个 <percentage>,则向 string 追加一个单一的 U+0025 百分号字符。
    4. 否则,如果 value 是一个 <length>,则向 string 追加 value 的单位的规范拼写。
    5. 返回 string
  4. 否则,返回一个实现特定的字符串,该字符串如果解析为 <length>,将返回与 value 最接近的长度值,考虑实现支持的 实数精度

在设置 valueAsString 时,执行以下步骤:

  1. 如果 SVGLength 对象是 只读,则 抛出 NoModificationAllowedError
  2. value 为分配给 valueAsString 的值。
  3. 使用 CSS 语法解析 value [ <number> | <length> | <percentage> ]。
  4. 如果解析失败,则 抛出 SyntaxError
  5. 否则,解析成功。将 SVGLengthvalue 设置为解析后的值。
  6. 如果 SVGLength 反映 一个 反射 属性的基本值或 反映 一个 反射 属性的基本值的元素,则 重新序列化 反射属性。

newValueSpecifiedUnits 方法用于以类型化的方式设置 SVGLength 的值。当调用 newValueSpecifiedUnits(unitType, valueInSpecifiedUnits) 时,执行以下步骤:

  1. 如果 SVGLength 对象是 只读,则 抛出 NoModificationAllowedError
  2. 如果 unitTypeSVG_LENGTHTYPE_UNKNOWN 或不是出现在上面长度单位类型表中的值,则 抛出 NotSupportedError
  3. 根据 unitType 的值设置 SVGLengthvalue
    SVG_LENGTHTYPE_NUMBER
    一个 <number>,其值为 valueInSpecifiedUnits
    SVG_LENGTHTYPE_PERCENTAGE
    一个 <percentage>,其数值因子为 valueInSpecifiedUnits
    其他任何值
    一个 <length>,其数值因子为 valueInSpecifiedUnits,单位如上面长度单位类型表所示
  4. 如果 SVGLength 反映 一个 反射 属性的基本值或 反映 一个 反射 属性的基本值的元素,则 重新序列化 反射属性。

convertToSpecifiedUnits 方法用于将 SVGLength 的值转换为特定类型。当调用 convertToSpecifiedUnits(unitType) 时,执行以下步骤:

  1. 如果 SVGLength 对象是 只读,则 抛出 NoModificationAllowedError
  2. 如果 unitTypeSVG_LENGTHTYPE_UNKNOWN 或是一个在上述长度单位类型表中不存在的值, 则 抛出 NotSupportedError
  3. absolute 为从 value 成员返回的值。
  4. 如果 unitTypeSVG_LENGTHTYPE_NUMBER,则:
    1. SVGLengthvalue 设置为一个 <number> ,其值为 absolute
  5. 否则,如果 unitTypeSVG_LENGTHTYPE_PERCENTAGE,则:
    1. viewport size 为基准以解析百分比,基于 SVGLength关联元素方向性
      没有 关联元素
      size 为 100
      有一个 关联元素 和水平 方向性
      size关联元素 的 SVG 视口宽度
      有一个 关联元素 和垂直 方向性
      size关联元素 的 SVG 视口高度
      有一个 关联元素 和未指定 方向性
      size关联元素 的 SVG 视口对角线长度(见 单位
    2. SVGLengthvalue 设置为将 absolute 转换为 <percentage> 的结果, 使用 viewport size 作为百分比基准。
  6. 否则,如果 unitTypeSVG_LENGTHTYPE_EMSSVG_LENGTHTYPE_EXS,则:
    1. font size 为基准以解析字体大小值, 基于 SVGLength关联元素
      没有 关联元素
      font sizefont-size 属性的初始值的绝对长度
      有一个 关联元素
      size关联元素font-size 属性的计算值
    2. SVGLengthvalue 设置为将 absolute 转换为 <length> 的结果,单位为 emex(根据 unitType), 使用 font size 作为 font-size 基准。
  7. 否则:
    1. SVGLengthvalue 设置为将 absolute 转换为 <length> 的结果,单位为通过在上述长度单位类型表中查找 unitType 得到的单位。
  8. 如果 SVGLength 反映了 的基本值 反射 属性或 反映了 基本值的元素 反射 属性, 则 重新序列化 反射属性。

4.5.3. 接口 SVGAngle

SVGAngle 接口用于表示可以是 <angle><number> 值的一个值。

一个 SVGAngle 对象可以被指定为 只读, 这意味着尝试修改该对象将导致抛出异常,如下所述。通过 animVal 属性反射的 SVGAngle 始终是 只读

一个 SVGAngle 对象 可以与特定元素 关联。关联元素用于 确定如果对象 反射 一个属性,应该更新哪个元素的内容属性。除非另有说明,一个 SVGAngle 对象不 与任何元素关联。

每个 SVGAngle 对象 以两种模式之一操作。它可以:

  1. 反映基本值,即 反射 的可动画属性 (通过 baseVal 成员暴露的 SVGAnimatedAngle),
  2. 被分离,这是通过 SVGAngle 对象创建时的情况 createSVGAngle

一个 SVGAngle 对象维护一个内部 <angle><number> 值,称为其

[Exposed=Window]
interface SVGAngle {

  // 角度单位类型
  const unsigned short SVG_ANGLETYPE_UNKNOWN = 0;
  const unsigned short SVG_ANGLETYPE_UNSPECIFIED = 1;
  const unsigned short SVG_ANGLETYPE_DEG = 2;
  const unsigned short SVG_ANGLETYPE_RAD = 3;
  const unsigned short SVG_ANGLETYPE_GRAD = 4;

  readonly attribute unsigned short unitType;
           attribute float value;
           attribute float valueInSpecifiedUnits;
           attribute DOMString valueAsString;

  void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits);
  void convertToSpecifiedUnits(unsigned short unitType);
};

SVGAngle上定义的数值角度单位类型常量用于表示SVGAngle的类型。它们的含义如下:

常量 含义
SVG_ANGLETYPE_UNSPECIFIED 无单位的<number>,解释为以度为单位的值。
SVG_ANGLETYPE_DEG 带有deg单位的<angle>
SVG_ANGLETYPE_RAD 带有rad单位的<angle>
SVG_ANGLETYPE_GRAD 带有grad单位的<angle>
SVG_ANGLETYPE_UNKNOWN 其他类型的值。

使用数值角度单位类型常量是一种反模式,并且不会引入任何其他单位或角度类型的新常量。如果支持并使用其他类型的角度,SVGAngle将使用SVG_ANGLETYPE_UNKNOWN单位类型。有关其他SVGAngle属性如何与这些类型的角度一起操作的详细信息,请参见下文。

unitType IDL属性表示SVGAngle的类型。获取unitType时,将执行以下步骤:

  1. 如果SVGAngle是无单位的<number>或带有degradgrad单位的<length>,则返回上述角度单位类型表中对应的常量值。
  2. 否则,返回SVG_ANGLETYPE_UNKNOWN

    例如,对于带有turn单位的<angle>,将返回SVG_ANGLETYPE_UNKNOWN

value IDL属性表示SVGAngle,单位为度。获取value时,将执行以下步骤:

  1. value设置为SVGAngle
  2. 如果value<number>,则返回该数字。
  3. 返回将value转换为度数的结果。

设置value时,将执行以下步骤:

  1. 如果SVGAngle对象是只读,则抛出NoModificationAllowedError
  2. value设置为要分配给value的值。
  3. SVGAngle设置为一个值为value<number>
  4. 如果SVGAngle反射基值反射属性,则重新序列化反射属性。

valueInSpecifiedUnits IDL 属性表示 SVGAngle 的数值因子。 在获取 valueInSpecifiedUnits 时,执行以下步骤:

  1. valueSVGAngle
  2. 如果 value<number>,则返回 该数字。
  3. 否则,value 是一个 <angle> 值。返回 单位之前的数值因子。

在设置 valueInSpecifiedUnits 时,执行以下步骤:

  1. 如果 SVGAngle 对象是 只读,则 抛出 NoModificationAllowedError
  2. value 为分配给 valueInSpecifiedUnits 的值。
  3. 如果 SVGAngle 是一个 <number>,则将其值更新为 value
  4. 否则,如果 SVGAngle 是一个 <angle>, 则将其数值因子更新为 value
  5. 如果 SVGAngle 反映了反射 属性的基值, 则 重新序列化 反射属性。

valueAsString IDL 属性表示 SVGAngle 作为字符串。 在获取 valueAsString 时,执行以下步骤:

  1. valueSVGAngle
  2. string 为一个空字符串。
  3. factorvalue 的数值因子, 如果它是一个 <angle>, 或者如果是 <number> 则为 value 本身。
  4. 将实现特定的字符串追加到 string,如果解析为 <number>, 则返回与 factor 最接近的数值,给定实现的支持的 实数精度
  5. 如果 value 是一个 <angle>, 则将 value 的单位的标准拼写追加到 string
  6. 返回 string

在设置 valueAsString 时,执行以下步骤:

  1. 如果 SVGAngle 对象是 只读,则 抛出 NoModificationAllowedError
  2. value 为分配给 valueAsString 的值。
  3. 使用 CSS 语法解析 value [ <number> | <angle> ].
  4. 如果解析失败,则 抛出 SyntaxError
  5. 否则,解析成功。将 SVGAngle 设置为解析的值。
  6. 如果 SVGAngle 反映了反射 属性的基值, 或 反映了 反射属性基值的某个元素, 则 重新序列化 反射属性。

newValueSpecifiedUnits 方法用于以类型化的方式设置 SVGAngle 的值。当调用 newValueSpecifiedUnits(unitType, valueInSpecifiedUnits) 时,执行以下步骤:

  1. 如果 SVGAngle 对象是 只读,则 抛出 NoModificationAllowedError
  2. 如果 unitTypeSVG_ANGLETYPE_UNKNOWN 或不在上面的角度单位类型表中,则 抛出 NotSupportedError
  3. 根据 unitType 的值设置 SVGAnglevalue
    SVG_ANGLETYPE_UNSPECIFIED
    一个值为 valueInSpecifiedUnits<number>
    其他情况
    一个数值因子为 valueInSpecifiedUnits<angle>,单位如上面的角度单位类型表所示
  4. 如果 SVGAngle 反映 反射属性的基值,或者 反映 反射属性基值的元素,则 重新序列化 反射属性。

convertToSpecifiedUnits 方法用于将 SVGAngle 的值转换为特定类型。当调用 convertToSpecifiedUnits(unitType) 时,执行以下步骤:

  1. 如果 SVGAngle 对象是 只读,则 抛出 NoModificationAllowedError
  2. 如果 unitTypeSVG_ANGLETYPE_UNKNOWN 或不在上面的角度单位类型表中,则 抛出 NotSupportedError
  3. degreesvalue 成员将返回的值。
  4. 如果 unitTypeSVG_ANGLETYPE_UNSPECIFIED,则:
    1. SVGAnglevalue 设置为值为 degrees<number>
  5. 否则:
    1. SVGAnglevalue 设置为将 degrees 转换为带有单位的 <angle> 的结果,单位通过查找上面的角度单位类型表中的 unitType 来确定。
  6. 如果 SVGAngle 反映 反射属性的基值,或者 反映 反射属性基值的元素,则 重新序列化 反射属性。

4.5.4. 列表接口

SVG 2 要求: 使 SVGList* 接口更像其他列表/数组。
解决方案: 向 svg 列表类型添加数组样式索引、.length 和 .item。
目的: 与其他数组类型对齐(例如 NodeList)。已在 Opera 和 Firefox 中实现。
负责人: Erik (ACTION-2975)
状态: 完成

一些 SVG 属性包含值列表,为表示这些值,有多个 SVG DOM 列表接口,每种必需的元素类型对应一个——SVGNumberListSVGLengthListSVGPointListSVGTransformListSVGStringList。前四个用于表示 SVGAnimatedNumberListSVGAnimatedLengthListSVGAnimatedPointsSVGTransformList 对象的基础和动画组件,而第五个 SVGStringList 用于 反映 一些接受字符串列表的未动画属性。

大多数 列表接口 的形式如下:

interface SVGNameList {

  readonly attribute unsigned long length;
  readonly attribute unsigned long numberOfItems;

  void clear();
  Type initialize(Type newItem);
  getter Type getItem(unsigned long index);
  Type insertItemBefore(Type newItem, unsigned long index);
  Type replaceItem(Type newItem, unsigned long index);
  Type removeItem(unsigned long index);
  Type appendItem(Type newItem);
  setter void (unsigned long index, Type newItem);
};

其中 Name 是列表元素的描述性名称(“Number”、“Length”、“Point”、“Transform”或“String”),Type 是列表元素的 IDL 类型(SVGNumberSVGLengthDOMPointSVGTransformDOMString)。

SVGTransformList 接口采用上述形式,但具有两个额外的方法。

SVGTransformList 外,所有 列表接口 对象都反映了被反射内容属性的基础值。SVGTransformList 对象反映了一个展示属性(‘transform’gradientTransformpatternTransform)。所有 列表接口 对象都与特定元素相关联。与 SVGLength 和类似对象不同,"独立"的 列表接口 对象不存在。

一个 列表接口 对象维护一个内部元素列表,以下文中简单称为“列表”。IDR 属性和方法用于检查和操作列表中的元素。列表也可以在反映内容属性发生变化以及内容属性动画变化时进行更改(对于 SVGTransformList 对象,响应于 transform 属性的计算值变化)。

一个 列表接口 对象可以被指定为 只读,这意味着尝试修改该对象将导致抛出异常,如下所述。通过 animVal IDL 属性反映的 列表接口 对象始终为 只读

一个 列表接口 对象通过运行以下步骤 进行同步

  1. value 成为被反射内容属性的基础值(如果属性不存在或无效,则使用属性的 初始值)。
  2. length 为列表中的项目数量。
  3. new lengthvalue 中的值数量。如果 value 是关键字 none(如 transform 属性所支持),则 new length 为 0。
  4. 如果列表元素类型为 SVGNumberSVGLengthDOMPointSVGTransform,则:
    1. 如果 length > new length,则:
      1. 分离 列表中索引大于或等于 new length 的每个对象。
      2. 将列表截断至长度 new length
      3. length 设置为 new length
    2. length < new length 时:
      1. item 为新创建的列表元素类型对象。
      2. 附加 item 到该 列表接口 对象。
      3. item 添加到列表。
      4. length 设置为 length + 1。
    3. index 为 0。
    4. index < length 时:
      1. item 为列表中索引为 index 的对象。
      2. vvalue 中索引为 index 的值。
      3. item 的值设置为 v
      4. 如果 itemSVGTransform 对象,则将其 矩阵对象 的组件设置为匹配新的变换函数值。
      5. index 设置为 index + 1。
  5. 否则,列表元素类型为 DOMString
    1. value 中的值替换列表,生成一个新列表。

每当一个列表元素对象被分离时,将根据列表元素类型执行以下步骤:

SVGNumber
SVGNumber设置为不再与任何元素关联。 如果SVGNumber只读的, 则将其设置为不再只读。
SVGLength
SVGLength设置为不再与任何元素关联。 如果SVGLength只读的, 则将其设置为不再只读。将SVGLength的方向设置为未指定方向性
DOMPoint
DOMPoint设置为不再与任何元素关联。 如果DOMPoint只读的, 则将其设置为不再只读。
SVGTransform
SVGTransform设置为不再与任何元素关联。 如果SVGTransform只读的, 则将其设置为不再只读。
DOMString
不执行任何操作。

每当一个列表元素对象被附加时,将根据列表元素类型执行以下步骤:

SVGNumber
SVGNumber与列表接口对象所关联的元素关联。 此外,取决于列表接口对象通过哪个IDL属性进行反射:
baseVal
SVGNumber设置为反映基值元素
animVal
SVGNumber设置为反映基值元素
SVGLength
SVGLength与列表接口对象所关联的元素关联,并将其方向性设置为由所反射的属性指定的方向性。 此外,取决于列表接口对象通过哪个IDL属性进行反射:
baseVal
SVGLength设置为反映基值元素
animVal
SVGLength设置为反映基值元素。将SVGLength设置为只读
DOMPoint
DOMPoint与列表接口对象所关联的元素关联。 此外,取决于列表接口对象通过哪个IDL属性进行反射:
baseVal
DOMPoint设置为反映基值元素
animVal
DOMPoint设置为反映基值元素
SVGTransform
SVGTransform与列表接口对象所关联的元素关联。 将SVGTransform设置为反映一个表现属性值的元素
DOMString
不执行任何操作。

一个 支持的属性索引列表接口 对象是所有非负整数的集合, 小于列表的长度。

lengthnumberOfItems IDL 属性 表示列表的长度,并在获取时简单地返回 列表的长度。

clear 方法用于 移除列表中的所有项。当调用 clear() 时,执行以下步骤:

  1. 如果列表是 只读,则 抛出 NoModificationAllowedError
  2. 分离 然后移除列表中的所有元素。
  3. 如果列表 反映 一个属性,或者表示一个 反映 一个属性的对象的基本值,则 重新序列化 反映的属性。

initialize 方法 用于清除列表并添加一个单一的指定值。 当调用 initialize(newItem) 时,执行以下步骤:

  1. 如果列表是 只读,则 抛出 NoModificationAllowedError
  2. 分离 然后移除列表中的所有元素。
  3. 如果 newItem 是对象类型,并且 newItem 不是分离对象,则将 newItem 设置为 与 newItem 相同类型的一个新创建的对象, 并且具有相同的(数字或长度)值。
  4. 附加 newItem列表接口 对象。
  5. newItem 附加到此列表。
  6. 如果列表 反映 一个属性,或者表示一个 反映 一个属性的对象的基本值,则 重新序列化 反映的属性。
  7. 返回 newItem

getItem 方法用于 从指定位置获取列表中的项。当调用 getItem(index) 时,执行以下步骤:

  1. 如果 index 大于或等于列表的长度,则 抛出 一个 IndexSizeError
  2. 返回列表中位置 index 的元素。

    注意,如果列表的元素类型是对象类型, 比如 SVGLength,则返回的是 对该对象的引用,而不是 该对象的副本。

insertItemBefore 方法用于在特定位置插入元素到列表中。 当调用 insertItemBefore(newItem, index) 时, 执行以下步骤:

  1. 如果列表是 只读,则 抛出 NoModificationAllowedError
  2. 如果 newItem 是对象类型,并且 newItem 不是分离对象,则将 newItem 设置为 与 newItem 相同类型的一个新创建的对象, 并且具有相同的(数字或长度)值。
  3. 如果 index 大于列表的长度,则 将 index 设置为列表长度。
  4. 在索引 index 插入 newItem 到列表中。
  5. newItem 附加到 列表接口 对象。
  6. 如果列表 反映 一个属性,或者表示一个 反映 一个属性的对象的基本值,则 重新序列化 反映的属性。
  7. 返回 newItem

replaceItem 方法 用于用新项替换列表中的现有项。 当调用 replaceItem(newItem, index) 时,执行以下步骤:

  1. 如果列表是 只读,则 抛出 NoModificationAllowedError
  2. 如果 index 大于或等于列表的长度,则 抛出 一个 IndexSizeError
  3. 如果 newItem 是对象类型,并且 newItem 不是分离对象,则将 newItem 设置为 与 newItem 相同类型的一个新创建的对象, 并且具有相同的(数字或长度)值。
  4. 分离 列表中索引 index 的元素。
  5. newItem 替换列表中索引 index 的元素。
  6. 附加 newItem列表接口 对象。
  7. 如果列表 反映 一个属性,或者表示一个 反映 一个属性的对象的基本值,则 重新序列化 反映的属性。
  8. 返回 newItem

removeItem 方法用于从列表中移除一项。 当调用 removeItem(index) 时,执行以下步骤:

  1. 如果列表是 只读,则 抛出 NoModificationAllowedError
  2. 如果 index 大于或等于列表的长度,则 抛出 一个 IndexSizeError,并附带代码。
  3. item 为列表中索引 index 的元素。
  4. 分离 item
  5. 移除列表中索引 index 的元素。
  6. 返回 item

appendItem 方法用于将一项附加到列表的末尾。 当调用 appendItem(newItem) 时,执行以下步骤:

  1. 如果列表是 只读,则 抛出 NoModificationAllowedError
  2. 如果 newItem 是对象类型,并且 newItem 不是分离对象,则将 newItem 设置为与 newItem 相同类型的一个新创建的对象,并具有相同的(数字或长度)值。
  3. index 为列表的长度。
  4. newItem 附加到列表的末尾。
  5. 附加 newItem列表接口 对象。
  6. 如果列表 反映 一个属性,或者表示一个 反映 一个属性的对象的基本值,则 重新序列化 反映的属性。
  7. 返回 newItem

索引属性设置器 的行为与 replaceItem 方法相同。

4.5.5. 接口 SVGNumberList

SVGNumberList 接口是一个 列表接口,其元素为 SVGNumber 对象。一个 SVGNumberList 对象表示一个数字列表。

[Exposed=Window]
interface SVGNumberList {

  readonly attribute unsigned long length;
  readonly attribute unsigned long numberOfItems;

  void clear();
  SVGNumber initialize(SVGNumber newItem);
  getter SVGNumber getItem(unsigned long index);
  SVGNumber insertItemBefore(SVGNumber newItem, unsigned long index);
  SVGNumber replaceItem(SVGNumber newItem, unsigned long index);
  SVGNumber removeItem(unsigned long index);
  SVGNumber appendItem(SVGNumber newItem);
  setter void (unsigned long index, SVGNumber newItem);
};

所有 SVGNumberList 接口成员的行为在上述 列表接口 部分中定义。

4.5.6. 接口 SVGLengthList

SVGLengthList 接口是一个 列表接口,其元素为 SVGLength 对象。一个 SVGLengthList 对象表示一个长度列表。

[Exposed=Window]
interface SVGLengthList {

  readonly attribute unsigned long length;
  readonly attribute unsigned long numberOfItems;

  void clear();
  SVGLength initialize(SVGLength newItem);
  getter SVGLength getItem(unsigned long index);
  SVGLength insertItemBefore(SVGLength newItem, unsigned long index);
  SVGLength replaceItem(SVGLength newItem, unsigned long index);
  SVGLength removeItem(unsigned long index);
  SVGLength appendItem(SVGLength newItem);
  setter void (unsigned long index, SVGLength newItem);
};

所有 SVGLengthList 接口成员的行为在上述 列表接口 部分中定义。

4.5.7. 接口 SVGStringList

SVGStringList 接口是一个 列表接口,其元素为 DOMString 值。一个 SVGStringList 对象表示一个字符串列表。

[Exposed=Window]
interface SVGStringList {

  readonly attribute unsigned long length;
  readonly attribute unsigned long numberOfItems;

  void clear();
  DOMString initialize(DOMString newItem);
  getter DOMString getItem(unsigned long index);
  DOMString insertItemBefore(DOMString newItem, unsigned long index);
  DOMString replaceItem(DOMString newItem, unsigned long index);
  DOMString removeItem(unsigned long index);
  DOMString appendItem(DOMString newItem);
  setter void (unsigned long index, DOMString newItem);
};

所有 SVGStringList 接口成员的行为在上述 列表接口 部分中定义。

4.6. 反映可动画的 SVG 属性的 DOM 接口

以下接口用于表示可动画内容属性的反映值。 它们各自由两个组件对象组成,表示相同的数据: baseValanimValbaseVal(基值)对象是可修改的, 用于更新相应的属性值。

在 SVG 1.1 中,SVG DOM 接口的 animVal 属性表示反映属性的当前动画值。 在这个版本的 SVG 中,animVal 不再表示当前动画值,而是 baseVal 的别名。

4.6.1. 接口 SVGAnimatedBoolean

一个 SVGAnimatedBoolean 对象用于 反映 一个取布尔值的可动画属性。

[Exposed=Window]
interface SVGAnimatedBoolean {
           attribute boolean baseVal;
  readonly attribute boolean animVal;
};

baseValanimVal IDL 属性 都表示反映属性的当前非动画值。 在获取 baseValanimVal 时, 执行以下步骤:

  1. value 为反映属性的值,如果不存在则为空字符串。
  2. 如果 value 不是 "true" 或 "false",则将 value 设置为反映属性的 初始值
  3. 如果 value 是 "true",则返回 true,否则返回 false。

在设置 baseVal 时, 如果值为 true,则反映属性设置为 "true",否则设置为 "false"。

4.6.2. 接口 SVGAnimatedEnumeration

一个 SVGAnimatedEnumeration 对象用于 反映 一个取关键字值的可动画属性(例如 method 属性在 textPath) 或反映可动画属性的值类型(仅通过 orientType IDL 属性反映 marker 元素的 orient 属性)。

[Exposed=Window]
interface SVGAnimatedEnumeration {
           attribute unsigned short baseVal;
  readonly attribute unsigned short animVal;
};

对于反映仅取关键字值的可动画属性的 SVGAnimatedEnumeration 对象,baseValanimVal IDL 属性表示反映属性的当前非动画值。 对于 orientType, 它们表示反映的 orient 属性的当前非动画值的类型。在获取 baseValanimVal 时,执行以下步骤:

  1. value 为反映属性的值(如果不存在或无效,则使用属性的 初始值)。
  2. 返回 value数值类型值, 根据反映 IDL 属性的定义。

在设置 baseVal 时,执行以下步骤:

  1. value 为赋值给 baseVal 的值。
  2. 如果 value 为 0 或不是反映属性的任何值的 数值类型值,则将反映属性设置为空字符串。
  3. 否则,如果反映的 IDL 属性是 orientTypevalueSVG_MARKER_ORIENT_ANGLE, 则将反映属性设置为字符串 "0"。
  4. 否则,value 为反映属性的特定单个关键字值的 数值类型值。 将反映属性设置为该值。

4.6.3. 接口 SVGAnimatedInteger

一个 SVGAnimatedInteger 对象用于 反映 一个取整数值的可动画属性(例如 numOctavesfeTurbulence)。 它还用于反映一个取整数后跟一个可选第二个整数的可动画属性的一部分(例如 orderfeConvolveMatrix)。

SVGAnimatedInteger 接口在本规范中未使用,但 滤镜效果 规范中有多个用例。

[Exposed=Window]
interface SVGAnimatedInteger {
           attribute long baseVal;
  readonly attribute long animVal;
};

对于反映单个整数值的可动画属性的 SVGAnimatedInteger 对象,baseValanimVal IDL 属性表示反映属性的当前非动画值。 对于那些反映一个整数的属性,该属性取整数后跟一个可选的第二个整数,它们表示两个整数之一的当前非动画值。在获取 baseValanimVal 时,执行以下步骤:

  1. value 为反映属性的值(如果不存在或无效,则使用属性的 初始值)。
  2. 如果反映属性被定义为取整数后跟一个可选的第二个整数,则:
    1. 如果这个 SVGAnimatedInteger 对象反映第一个整数,则返回 value 中的第一个值。
    2. 否则,这个 SVGAnimatedInteger 对象反映第二个整数。如果第二个值已被明确指定,则返回该值,如果没有,则返回根据属性定义的隐式值。

      例如,order 的定义表明隐式第二个整数与显式第一个整数相同。

  3. 否则,反映属性被定义为取单个整数值。返回 value

在设置 baseVal 时,执行以下步骤:

  1. value 为赋值给 baseVal 的值。
  2. new 为一个整数列表。
  3. 如果反映属性被定义为取整数后跟一个可选的第二个整数,则:
    1. current 为反映属性的值(如果不存在或无效,则使用属性的 初始值)。
    2. firstcurrent 中的第一个整数。
    3. secondcurrent 中的第二个整数,如果已明确指定;否则,为根据属性定义的隐式值。
    4. 如果这个 SVGAnimatedInteger 对象反映第一个整数,则将 first 设置为 value。 否则,将 second 设置为 value
    5. first 添加到 new 中。
    6. second 添加到 new 中。
  4. 否则,反映属性被定义为取单个整数值。将 value 添加到 new 中。
  5. 将内容属性设置为由 new 中的每个整数序列化为实现特定字符串的字符串,该字符串在作为 <number> 使用 CSS 语法解析时,会返回该整数,以单个 U+0020 空格字符连接和分隔。

4.6.4. 接口 SVGAnimatedNumber

一个 SVGAnimatedNumber 对象用于 反映 一个 可动画的属性,该属性的值为数字(例如 pathLengthpath上)。它还用于反映一个 可动画属性的一部分,该属性的值为数字,后面跟着一个可选的第二个数字(例如 kernelUnitLengthfeDiffuseLighting上)。

[Exposed=Window]
interface SVGAnimatedNumber {
           attribute float baseVal;
  readonly attribute float animVal;
};

对于 SVGAnimatedNumber 对象,它们 反映 一个可动画属性,该属性的值为单个数字,baseValanimVal IDL 属性表示被反映属性的当前非动画值。 对于那些反映一个数字的属性,该属性的值为数字后面跟一个可选的第二个数字,它们表示两个数字中的一个的当前非动画值。在获取 baseValanimVal 时,将执行以下步骤:

  1. value 为被反映属性的值 (如果不存在或无效,则使用属性的 初始值)。
  2. 如果被反映属性被定义为一个数字 后面跟着一个可选的第二个数字,则:
    1. 如果这个 SVGAnimatedNumber 对象反映第一个数字,则返回 value 中的第一个值。
    2. 否则,这个 SVGAnimatedNumber 对象反映第二个数字。如果 第二个值已明确指定,则返回 value 中的第二个值;如果没有,则返回 按照属性定义所述的隐含值。

      例如,kernelUnitLength 的定义表明隐含的第二个数字与显式的第一个数字相同。

  3. 否则,被反映的属性被定义为一个单一的数字值。返回 value

在设置 baseVal 时, 将执行以下步骤:

  1. value 为被分配给 baseVal 的值。
  2. new 为一个数字列表。
  3. 如果被反映属性被定义为一个数字 后面跟着一个可选的第二个数字,则:
    1. current 为被反映属性的值 (如果不存在或无效,则使用属性的 初始值)。
    2. firstcurrent 中的第一个数字。
    3. secondcurrent 中的第二个数字 如果已明确指定,如果没有,则为按照属性定义所述的隐含值。
    4. 如果这个 SVGAnimatedNumber 对象反映第一个数字,则将 first 设置为 value。 否则,将 second 设置为 value
    5. first 附加到 new
    6. second 附加到 new
  4. 否则,被反映的属性被定义为一个单一的数字值。将 value 附加到 new
  5. 将内容属性设置为一个字符串,由 new 中的每个数字序列化为特定于实现的字符串,如果使用 CSS 语法解析为 <number>,将返回 最接近该数字的值(给定实现支持的 精度 实数精度),用一个 U+0020 空格字符连接和分隔。

4.6.5. 接口 SVGAnimatedLength

一个 SVGAnimatedLength 对象用于 反映 (a)一个可动画属性,该属性取一个 <length><percentage><number> 值,或(b)一个 CSS 属性,该属性取这些值之一及其相应的 表现属性。

[Exposed=Window]
interface SVGAnimatedLength {
  [SameObject] readonly attribute SVGLength baseVal;
  [SameObject] readonly attribute SVGLength animVal;
};

属性 baseValanimVal 的 IDL 属性 代表反映内容属性的当前值。 获取 baseValanimVal 时,将返回一个 SVGLength 对象,该对象:

4.6.6. 接口 SVGAnimatedAngle

一个 SVGAnimatedAngle 对象用于 反映 动画的 <angle> 值 的 orient 属性在 marker 上, 通过 orientAngle IDL 属性。

[Exposed=Window]
interface SVGAnimatedAngle {
  [SameObject] readonly attribute SVGAngle baseVal;
  [SameObject] readonly attribute SVGAngle animVal;
};

属性 baseValanimVal 的 IDL 属性表示 反映的 <angle> 当前非动画值 的 orient 属性。获取 baseValanimVal 时,将返回一个 SVGAngle 对象,该对象:

4.6.7. 接口 SVGAnimatedString

一个 SVGAnimatedString 对象用于 反映 一个 取字符串值的可动画属性。它可以选择性地定义为额外反映一个第二个已弃用的属性。

[Exposed=Window]
interface SVGAnimatedString {
           attribute DOMString baseVal;
  readonly attribute DOMString animVal;
};

属性 baseValanimVal 的 IDL 属性 代表反映属性的当前非动画值。 获取 baseValanimVal 时,将执行以下步骤:

  1. 如果反映的属性不存在,则:
    1. 如果 SVGAnimatedString 对象定义为额外反映第二个已弃用的属性,并且该属性存在, 则返回其值。
    2. 否则,如果反映属性具有 初始值, 则返回它。
    3. 否则,返回空字符串。
  2. 否则,反映的属性存在。返回其值。

对于 href 成员在 SVGURIReference 接口上, 如果存在且 ‘href’ 属性不存在, 则这将导致返回已弃用的 xlink:href 属性, 在所有其他情况下返回 ‘href’ 属性。

设置 baseVal 时, 将执行以下步骤:

  1. 如果反映的属性不存在, SVGAnimatedString 对象 定义为额外反映第二个已弃用的属性,并且该已弃用属性存在, 则将该已弃用属性设置为指定值。
  2. 否则,将反映的属性设置为指定值。

对于 href 成员在 SVGURIReference 接口上, 如果存在且 ‘href’ 属性不存在, 则这将导致设置已弃用的 xlink:href 属性, 在所有其他情况下设置 ‘href’ 属性。

4.6.8. 接口 SVGAnimatedRect

一个 SVGAnimatedRect 对象用于 反映 一个 取矩形值的可动画属性,如 xywidthheight 所指定。

在本规范中,唯一反映为 SVGAnimatedRect 的属性是 viewBox

[Exposed=Window]
interface SVGAnimatedRect {
  [SameObject] readonly attribute DOMRect baseVal;
  [SameObject] readonly attribute DOMRectReadOnly animVal;
};

属性 baseValanimVal 的 IDL 属性代表反映属性的当前非动画矩形值。 获取 baseValanimVal 时,将返回一个 DOMRect 对象。

在创建 baseValanimVal DOMRect 对象后,任何时候反映内容属性被添加、移除或更改时,将执行以下步骤:

  1. value 为反映属性的值 (如果不存在或无效,则使用属性的 初始值)。
  2. xywidthheightvalue 的相应组成部分。
  3. DOMRect 对象的 x 坐标y 坐标宽度高度 分别设置为 xywidthheight

每当 x 坐标y 坐标宽度高度 属性 的 baseValanimVal DOMRect 对象 发生变化时,除了前面算法的一部分,该算法将内容属性的值反映到 DOMRect 中,反映的 内容属性必须被 重新序列化

4.6.9. 接口 SVGAnimatedNumberList

一个 SVGAnimatedNumberList 对象 用于 反映 一个可动画属性,该属性接受一系列 <number> 值。

[Exposed=Window]
interface SVGAnimatedNumberList {
  [SameObject] readonly attribute SVGNumberList baseVal;
  [SameObject] readonly attribute SVGNumberList animVal;
};

属性 baseValanimVal 的 IDL 属性 代表反映属性的当前非动画值。 获取 baseValanimVal 时,将返回一个 SVGNumberList 对象, 该对象反映反映属性的基础值。

4.6.10. 接口 SVGAnimatedLengthList

一个 SVGAnimatedLengthList 对象 用于 反映 一个可动画属性,该属性接受一系列 <length><percentage><number> 值。

[Exposed=Window]
interface SVGAnimatedLengthList {
  [SameObject] readonly attribute SVGLengthList baseVal;
  [SameObject] readonly attribute SVGLengthList animVal;
};

属性 baseValanimVal 的 IDL 属性 代表反映属性的当前非动画值。 获取 baseValanimVal 时,将返回一个 SVGLengthList 对象, 该对象反映反映属性的基础值。

4.7. 其他 DOM 接口

4.7.1. 接口 SVGUnitTypes

SVGUnitTypes 接口定义了一组常用的常量, 用于反映 gradientUnitspatternContentUnits 和其他类似属性。

[Exposed=Window]
interface SVGUnitTypes {
  // 单位类型
  const unsigned short SVG_UNIT_TYPE_UNKNOWN = 0;
  const unsigned short SVG_UNIT_TYPE_USERSPACEONUSE = 1;
  const unsigned short SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
};

SVGUnitTypes 上定义的单位类型常量具有以下含义:

常量 含义
SVG_UNIT_TYPE_USERSPACEONUSE 对应于 'userSpaceOnUse' 属性值。
SVG_UNIT_TYPE_OBJECTBOUNDINGBOX 对应于 'objectBoundingBox' 属性值。
SVG_UNIT_TYPE_UNKNOWN 某种其他类型的值。

4.7.2. 混合 SVGTests

SVGTests 接口用于反映 条件处理属性,并混合到支持这些属性的其他接口中。

interface mixin SVGTests {
  [SameObject] readonly attribute SVGStringList requiredExtensions;
  [SameObject] readonly attribute SVGStringList systemLanguage;
};

requiredExtensions IDL 属性 反映 requiredExtensions 内容 属性。

systemLanguage IDL 属性 反映 systemLanguage 内容 属性。

4.7.3. 混合 SVGFitToViewBox

SVGFitToViewBox 接口用于 反映 viewBoxpreserveAspectRatio 属性,并混合到支持这两个属性的其他接口中。

interface mixin SVGFitToViewBox {
  [SameObject] readonly attribute SVGAnimatedRect viewBox;
  [SameObject] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
};

viewBox IDL 属性 反映 viewBox 内容属性。

preserveAspectRatio IDL 属性 反映 preserveAspectRatio 内容 属性。

4.7.4. 混合 SVGZoomAndPan

SVGZoomAndPan 接口用于 反映 zoomAndPan 属性,并混合到支持该属性的其他接口中。

interface mixin SVGZoomAndPan {

  // 缩放和泛型类型
  const unsigned short SVG_ZOOMANDPAN_UNKNOWN = 0;
  const unsigned short SVG_ZOOMANDPAN_DISABLE = 1;
  const unsigned short SVG_ZOOMANDPAN_MAGNIFY = 2;

  attribute unsigned short zoomAndPan;
};

SVGZoomAndPan 上定义的缩放和泛型类型常量具有以下含义:

常量 含义
SVG_ZOOMANDPAN_DISABLE 对应于 'disable' 属性值。
SVG_ZOOMANDPAN_MAGNIFY 对应于 'magnify' 属性值。
SVG_ZOOMANDPAN_UNKNOWN 某种其他类型的值。

zoomAndPan IDL 属性表示 zoomAndPan 属性的值。 获取 zoomAndPan 时,将执行以下步骤:

  1. value 设为当前的 zoomAndPan 属性值(如果该属性不存在或无效,则使用属性的 初始值)。
  2. 返回上述缩放和泛型类型常量表中对应于 value 的常量。

设置 zoomAndPan 时,将执行以下步骤:

  1. value 设为分配给 zoomAndPan 的值。
  2. 如果 valueSVG_ZOOMANDPAN_UNKNOWN 或不对应于上述缩放和泛型类型常量表中的条目,则返回。
  3. zoomAndPan 属性设为与 value 对应的缩放和泛型类型常量表中的关键字值。

4.7.5. 混合 SVGURIReference

SVGURIReference 接口用于 反映 ‘href’ 属性和已弃用的 xlink:href 属性。

interface mixin SVGURIReference {
  [SameObject] readonly attribute SVGAnimatedString href;
};

href IDL 属性 表示 ‘href’ 属性的值,并且在支持该属性的元素上, 已弃用的 xlink:href 属性。在获取 href 时,返回一个 SVGAnimatedString 对象,该对象:

SVGAnimatedString 接口被定义为通过其 baseValanimVal 成员反映已弃用的 xlink:href 属性,如果该属性存在而‘href’ 不存在,则反映该属性,在所有 其他情况下反映 ‘href’ 属性。动画元素attributeName='xlink:href' 视为目标 ‘href’ 属性的别名。