区别
| Canvas | SVG |
|---|
| JS实现 | XML实现 |
| 标量 | 矢量 |
| 依赖分辨率(逐像素进行渲染) | 不依赖分辨率(改变尺寸时不会失真) |
| 整个画布为一个对象 | 每个元素都是一个对象 |
| 不支持事件(理由如上,曲线救国可看附录) | 支持每个元素的事件 |
| 弱的文本渲染能力 | 最适合带有大型渲染区域的应用程序(比如谷歌地图) |
| 能够以 .png 或 .jpg 格式保存结果图像 | 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快) |
| 最适合图像密集型的游戏,其中的许多对象会被频繁重绘。 | 不适合游戏应用 |
Canvas
- HTML5新增;
- 使用JS绘制2D图像,画布是一个矩形区域,可以控制其每一像素,逐像素进行渲染;
- 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法;
- 一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。
SVG
- 可伸缩矢量图形 (Scalable Vector Graphics)。
- 使用XML绘制2D图形;
- 改变尺寸时不会失真;
- SVG DOM中的每个元素都是可用的;
- 可为每个元素附加js事件;
- 每个被绘制的图形均被视为对象,如果SVG对象的属性发生变化,浏览器能够自动重现图形;
- 是万维网联盟的标准;
- 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体。
附录
Canvas 支持事件
让canvas 支持事件
参考文献
HTML 5 Canvas vs. SVG
让canvas 支持事件