SVG——新一代Web设计及互动媒体的革新

SVG DOM规范

文章索引
SVG DOM规范
SVG DOM对象
SVG DOM交互
所有页面

SVG DOM   什么是SVG DOM规范?SVG DOM遵循DOM1和DOM2,而且完全支持DOM2 Core规范。DOM 2 Core规范中最核心最主要的对象主要有:Node对象、Document对象和Element对象。本文介绍了SVG DOM对象、SVG DOM交互及SVG DOM主要事件等知识。

来源:SVG中国(ChinaSVG.COM)

  什么是DOM?用W3C的话来说?DOM是“一种允许程序或脚本动态地访问更新文档内容、结构和样式的、独立于平台和语言的规范化接口。“通俗一点说,DOM就是一种规范,只要遇上符合这种规范的文档,就可以在程序中引用其内容,还可以进行修改,这给文档的处理带来了相当大的灵活性。 如果你对SVG DOM还是有疑惑,请阅读“什么是DOM?以及DOM的结构和接口”一文。

  SVG DOM基于DOM规范。DOM是访问和维护XML文档的应用程序接口。它定义了文档的逻辑结构以及存取和维护文档的方法。在DOM的详细说明中,“文档”指的是广泛意义的文档,XML用来代表存储在不同系统上的各种各样的信息,包括那些在传统意义上被看作数据,而不被认为是文档的信息。现在XML可以把这样的数据表示为文档,并由DOM管理。利用DOM可以建立文档,遍历文档结构,还可以增加、删除、修改文档元素和内容。

  SVG DOM遵循DOM1、DOM2规范的大部分内容,因此,SVG中的每个属性和样式都可以通过脚本编程来访问;另外,SVG也提供了一套扩展的DOM接口,让通过脚本编程实现动画效果的手段更方便快捷。脚本语言中的定时器可以很好地触发和控制图象的运动。


  SVG DOM遵循DOM1和DOM2,而且完全支持DOM2 Core规范。

  DOM 2 Core规范中最核心最主要的对象主要有:Node对象、Document对象和Element对象。

  Node对象是DOM中一个最基本的对象。使用它可以遍历整个文档,其中用到的属性主要有:parentNode(一个只读Node对象)、childNodes(一个只读NodeList对象)、firstChild(一个只读Node对象)、lastChild(一个只读Node对象)、previousSibling(一个只读Node对象)、nextSibling(一个只读Node对象)、ownerDocument(一个只读Document对象)。图1可以说明它们的关系。


图1 SVG DOM Node对象属性示意图

  Node对象还有一些很有用的方法,可以动态改变DOM层次结构,主要的有:insertBefore(newChild, refChild)、replaceChild(newChild,o ldChild)、removeChild(oldChild)、appendChild(newChild)、cloneNode(deep)等。

  Document对象象征着XML文档DOM树的根,所有Node对象的ownerDocument属性就和它联系,主要为了方便每个Node找到创建者。Document对象从Node对象继承,除了拥有所有Node对象的属性和方法之外,还有自己的属性和方法,其中的。reateElement(tagName)和getElementByld(elementld)方法都返回Element对象,用于创建元素和按ID寻找元素,用得很多。

  Element对象从Node对象继承,除了拥有所有Node对象的属性和方法之外,还有自己的属性和方法,其中的属性tagName(一个String数据)和方法getAttribute(name)和setAttribute(name,va lue)是属性的获取、修改的基本手段。

  DOM2 Core中还有用于管理节点集合的对象,主要有代表节点链表集合的NodeList对象和代表以名字为关键字的散列集合的NamedNodeMap对象。

  在标准DOM之外,SVG DOM提供自己特殊的DOM对象,其中主要用到了ElementTimeControl对象,它的方法beginElemento、endElement()可以让动画立刻开始和结束,这对脚本控制动画来说至关重要。


  SVG DOM的交互功能的实现主要靠事件(Event)和脚本配合来完成,表1列出了重要的一些事件。

表1 SVG DOM主要事件列表

 Event名称
 描述
 DOM2名字 Event属性名
 focusin
 当一个元素收到焦点时发生 DOMFocusln onfocusin
 focusout 当一个元素失去焦点时发生 DOMFocusOut onfocusout
 activa 当元素被激活时发生 DOMActivate onactivate
 click 当元素被鼠标等点设备单击时发生 (同名) onclick
 mousedown 当元素被鼠标等点设备的按钮按下时发生 (同名) onmousedown
 mouseup 当鼠标等点设备的按钮在元素上放开时发生 (同名) onmouseup
 mouseover 当鼠标等点设备移入元素时发生 (同名) onmouseover
 mousemove 当鼠标等点设备在元素上移动时发生 (同名) onmousemove
 mouseout 当鼠标等点设备移出元素时发生 (同名) onmouseout
 SVGLoad 当客户程序完全解析所有元素准备将元素渲染到目标设备时发生 (同名) onload
 SVGUnload 仅仅在svg元素被从DOM的window或frame中删除时发生 (同名) onunload
 SVGAbort 在元素被完全加载前页面被停止时发生 (同名) onabort
 SVGError 当元素不能正确加载时或者在执行脚本时发生了错误时发生 (同名) onerror
 SVGResize 当文档视口尺寸发生变化时发生,该事件的目标是svg元素 (同名) onresize
 beginEvent 当动画元素开始时发生,细节请看SMIL动画规范中的TimeEvent接口的描述 无 onbegin
 endEvent 当动画元素结束时发生,细节请看SMIL动画规范中的TimeEvent接口的描述 无 onend
 repeatEvent 当动画元素每次重复开始时发生,细节请看SMIL动画规范中的TimeEvent接口的描述 无 onrepeat

  SVG DOM与SVG动画有着密切的关连,SVG DOM产生动画的方式是由脚本语言调用DOM对象的属性和方法实现的,在SVG中使用脚本语言和HTML中类似,你可以通过“SVG动画编程及其应用”一文获得这方面的内容。

关于作者

  万里,1997年7月毕业于西北大学化学工程与机械专业,1998年8月进入金山公司担任软件工程师,参加WPS多个版本开发工作,其中WPS2000荣获国家科技进步二等奖。
  2003年9月入哈尔滨工业大学软件学院攻读软件工程硕士。 

(THE END)

 

将要更新