如何在HTML5中使用SVG

html-css07

如何在HTML5中使用SVG,第1张

svg

scalable

vector

graphics,是一种用来绘制矢量图的

html5

标签。你只需定义好xml属性,就能获得一致的图像元素。

使用svg之前先将标签加入到html

body中。就像其他的html标签一样,你可以为svg标签为之添加id属性。也可以为之添加css样式,例如“border-style:solidborder-width:2px”。svg标签跟其它的html标签有通用的属性。你可以用height="100px"

width="200px"

为其添加高度和宽度。

现在就将svg元素加入到我们html代码中,svg提供很多绘图形状,例如线条、圆、多边形等。

svg线条:

svg线条用标签定义,在此标签内你还可以定义其他的属性。

该标签包括像起点坐标(x1,y1)和终点坐标(x2,y2)这样的属性。指定x1,y1,x2,y2值来设定起点终点坐标。在指定好坐标后,可以为之添加一些样式,在style属性中使用“stroke:green”为线条指定颜色。同样你也可以用stroke-width:2为线条设置宽度。

svg画圆:

svg提供了一种不同的标签来画圆。正如你看到的下面代码,circle有个id为mycircle。为了定义圆的中心以及半径,使用cx="55"

cy="55"以及r="50"属性分别定义。使用fill="#219e3e"为圆填充颜色。同样你可以用stroke="#17301d"

stroke-width="2"定义圆周线条颜色和宽度。

svg矩形:

同样的使用标签来画矩形,我们同样设置了

id

属性

“myrectangle”

,用

width="300"

height="100"

定义高宽,使用

fills

属性定义填充颜色。用

strock

定义边框。还有一点需要注意,我用

fill-opacity="0.5"

stroke-opacity="0.5"

stroke

filling

都添加了透明度。

svg椭圆:

我们同样是用标签来绘制椭圆。设置其

id="myellipse"

,给定起中心坐标

cx="120"cy="60",长轴短轴半径

rx="100"

ry="50",并用设置填充颜色、边框宽度以及边框颜色style="fill:#3f5208stroke:blackstroke-width:3"。

svg多边形:

我们使用特定标签绘制多边形,points属性用来定义多边形的几个顶点,用左边对来定义,形如

points="10,10

75,150

150,60"

,这里定义了三个顶点(10,10),(75,150),(150,60)。同上面一样,用

style="fill:#63bcf7stroke:blackstroke-width:3"

定义多边形填充颜色、边框以及边框宽度。

canvas 与 SVG都能够使你在浏览器中画图,但它们的基本原理不同。

SVG 

SVG是一种在XML中描述二维图形的语言。 

SVG是基于XML的,意味着在SVG DOM内每一个元素都是可用的。你可以为每一个元素增加JS事件处理器。 

在SVG中,每一个图形被记作一个对象。如果一个SVG对象的属性发生改变,浏览器可以自动重新生成图形。

Canvas 

Canvas能够在fly上画2D图形(使用JS) 

Canvas能够按照像素重新生成。 

在Canvas中,一旦图形完成,就会被浏览器忘记。如果图形位置要发生改变,那么整个屏幕需要重画,包括图形覆盖的对象。

Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的。

SVG

1.SVG 是一种使用 XML 描述 2D 图形的语言。

2.SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。

3.在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。

Canvas

1.Canvas 通过 JavaScript 来绘制 2D 图形。

2.Canvas 是逐像素进行渲染的。

3.在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。

Canvas 与 SVG 的比较

下表列出了 canvas 与 SVG 之间的一些不同之处。

Canvas

1.依赖分辨率

2.不支持事件处理器

3.弱的文本渲染能力

4.能够以 .png 或 .jpg 格式保存结果图像

5.最适合图像密集型的游戏,其中的许多对象会被频繁重绘

SVG

1.不依赖分辨率

2.支持事件处理器

3.最适合带有大型渲染区域的应用程序(比如谷歌地图)

4.复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)

5.不适合游戏应用