由于 SVG 是基于 XML 的, 因而能制作出空前强大的动态交互图像,即 SVG 图像能对用户动作做出不同响应,例如高亮、声效、特效、动画等。作为 SVG 技术的一个应用,SVG 在手机等无线手持设备上的应用将是 3G 时代最重要的应用之一。支持 SVG 的手机,允许用户查看高质量的矢量图形及动画,同时,由于 SVG 采用文本传输,尺寸也会非常小,速度将会更快。
SVG 的主要竞争者是 Flash。与 Flash 相比,SVG 最大的优势是与其他标准(比如 XSL 和 DOM)相兼容,而 Flash 则是未开源的私有技术。
目前 IE9+,Firefox,Chrome,Safari 和 Opera 都支持内联 SVG,IE8 及其更早版本都需要安装一个插件,比如 Adobe SVG Viewer,插件是免费提供的。
(3)、SVG 文件
SVG 是 XML 文件,可用任何文本编辑器创建。
下面是一个简单的 SVG 文件例子,SVG 文件必须使用 .svg 后缀来保存:
代码解析:
第一行包含了 XML 声明。请注意 standalone 属性!该属性规定此 SVG 文件是否是“独立的”,或含有对外部文件的引用。standalone="no" 意味着 SVG 文档会引用一个外部文件 - 在这里,是 DTD 文件。
第二行引用了这个外部的 SVG DTD。该 DTD 位于 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"。该 DTD 位于 W3C,含有所有允许的 SVG 元素。
SVG 代码以 <svg> 元素开始,包括开放标签 <svg> 和闭合标签 </svg> ,这是根元素。width 和 height 属性可设置此 SVG 文档的宽度和高度。version 属性可定义所使用的 SVG 版本,xmlns 属性可定义 SVG 命名空间。
SVG 的 <circle> 用来创建一个圆。cx 和 cy 属性定义圆中心的 x 和 y 坐标,如果忽略这两个属性,那么圆点会被设置为 (0, 0)。r 属性定义圆的半径。stroke 和 stroke-width 属性控制如何显示形状的轮廓,上面文件中圆的轮廓设置为 2px 宽,黑边框。fill 属性设置形状内的颜色,文件中填充颜色为红色。
最后一行,关闭标签的作用是关闭 SVG 元素和文档本身。注意:所有的开始标签必须有结束标签。
(5)、HTML 创建 SVG
SVG 文件可通过以下标签嵌入 HTML 文档:<embed>、<object> 或者 <iframe>。
①、使用 <embed> 标签
<embed> 标签被所有主流的浏览器支持,并允许使用脚本。<embed> 标签是 HTML5 新添加的标签,所有只有 HTML5 支持,在 HTML4 和 XHTML 中不支持。
语法:
②、使用 <object> 标签
<object> 标签是 HTML 4 的标准标签,HTML5 也支持,所有主流浏览器都支持,它的缺点是不允许使用脚本。
语法:
③、使用 <iframe> 标签
所有主要浏览器都支持 <iframe>,并允许使用脚本,但只在 HTML5 中被允许,在 HTML4 中 XHTML 不支持。
语法:
④、HTML 嵌入 SVG 代码
IE9+、Chrome、Firefox 和 Safari 中,可以直接在 HTML 代码中嵌入 SVG 代码。目前 Opera 不支持 SVG 嵌入 HTML。
在 HTML5 中,可以把 SVG 元素直接嵌入 HTML 页面中:
SVG
上面的例子,在页面中创建一个多边形,在 Chrome 中显示如下:
SVG 的 <polygon> 标签可以用来创建含有不少于三个边的图形。多边形由直线组成,其形状是"封闭"的,即所有的线条连接起来。points 属性的每组值用于定义多边形每个角的 x 和 y 坐标。在 style 属性中可规定创建图像的样式,fill 属性规定填充的颜色,stroke 和 stroke-width 属性控制如何显示形状的轮廓,例子中为 2px 宽,黑边框。fill-rule 属性可以设置图形的内部区域。使用 fill-opacity 属性还可以设置填充颜色的透明度,该属性和 CSS 的 opacity 属性相同。
⑤、SVG 添加超链接
使用 a 元素可以为创建的 SVG 图形添加链接:
SVG 添加超链接Click meClick me
上面的例子,SVG 的 <rect> 标签可用于定义矩形,<text> 标签用于定义文本。注意:给 SVG 添加超链接,在 a 元素中一定要使用 xlink:href 属性,该属性是 XML 中的属性,用于指定要链接的 URL。
(6)、SVG 与 Canvas
Canvas 和 SVG 都可以在浏览器中创建图形,但是它们在根本上是不同的。
他们的区别在于:
SVG 是一种使用 XML 描述 2D 图形的语言。
而 Canvas 是通过 JavaScript 来绘制 2D 图形。
SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。
在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。
Canvas 是逐像素进行渲染的。
在 Canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。
下表列出了 Canvas 与 SVG 之间的一些不同之处:
Canvas SVG
依赖分辨率 不依赖分辨率
不支持事件处理 支持事件处理
弱的文本渲染能力 最适合带有大型渲染区域的应用程序(比如谷歌地图)
能够以 .png 或 .jpg 格式保存结果图像 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
最适合图像密集型的游戏,其中的许多对象会被频繁重绘 不适合游戏应用
5、HTML5 拖放(Drag and Drop)
拖放是 HTML5 标准的组成部分,任何元素都能够拖放。在代码中 Drag 为拖动,Drop 是拖放。
拖放是一种常见的特性,即抓取对象以后拖到另一个位置。
下面是一个简单的拖放例子: