Canvas VS. SVG

90 阅读1分钟

区别

CanvasSVG
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 支持事件