一、Canvas
只是图形容器,必须使用脚本来绘制图形
描述:
通过Javascript
来绘制2D图形。
是逐像素进行渲染的。
其位置发生改变,会重新进行绘制。
Canvas
对象表示一个 HTML
画布元素 -<canvas>
。它没有自己的行为,但是定义了一个 API 支持脚本化客户端绘图操作。
二、SVG
全称为可伸缩矢量图形 (Scalable Vector Graphics),意为可缩放的矢量图形。
描述:
一种使用XML
描述的2D图形的语言。用来描述二维矢量及矢量/栅格图形。
SVG
提供了3种类型的图形对象:矢量图形(vectorgraphicshape例如:由直线和曲线组成的路径)、图像(image)、文本(text)。
SVG
图形是可交互的和动态的,可以在SVG
文件中嵌入动画元素或通过脚本来定义动画。
SVG
基于XML
意味着,SVG DOM
中的每个元素都是可用的,可以为某个元素附加Javascript事件处理器。
在 SVG
中,每个被绘制的图形均被视为对象。如果 SVG
对象的属性发生变化,那么浏览器能够自动重现图形。
三、二者异同点
相同点:
都可以用来制作2D图形
不同点:
Canvas:
- 依赖分辨率
- 弱的文本渲染能力
- canvas可以很好的绘制像素,能够以 .png 、.jpg或 .gif 格式保存结果图像,可做为API容器。
- 最适合图像密集型的游戏,其中的许多对象会被频繁重绘
- 更适合渲染较小的区域
SVG:
- 不依赖分辨率
- 支持事件处理器
- SVG中属性改变时,浏览器可以重新呈现它,适用于矢量图
- 最适合带有大型渲染区域的应用程序(比如谷歌地图)
- 具有更好的文本渲染能力
- 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
- 不适合游戏应用
一句话总结:都是2D做图,SVG是矢量图,canvas是位图。Canvas 是逐像素进行渲染的,适合游戏。
四、用途
1、SVG为什么适合做google地图?
因为是矢量图,缩放不影响显示
2、SVG如何使用?
用svg标签,里面可以是circle标签
<svg width="100%" height="100%" >
<circle cx="300" cy="60" r="50" stroke="#ff0" stroke-width="3" fill="red" />
</svg>