# 9.2D

# 1.Canvas和SVG的区别?什么情况下用canvas,什么情况下用svg?

性质:

Canvas:是基于像素的位图图形格式,主要是通过 JS 来绘制

SVG:是基于矢量的绘图技术,放大缩小不会失真

DOM:

Canvas:不使用 DOM 为每个绘制的对象维护一个对象节点,也就是说画完了就不能修改其中的部分了,想要修改的话只能重新绘制

SVG:每个绘制的元素都是 DOM 节点。这意味着你可以使用 JavaScript 和 CSS 样式和事件处理器来修改这些元素。

性能:

Canvas:对于大量的、需要频繁重绘的数据或动画,canvas 可能会有更好的性能。

SVG:对于较小数量的对象,其中对象的位置需要被频繁地动态更新,SVG 可能更为合适。

交互性:

Canvas:没有对象表示,如果要进行交互必须自己编写交互逻辑。

SVG:可以为每个图形元素绑定事件处理器。

使用场景:

Canvas:

高度动态的应用,如游戏。 需要进行像素操作的应用,如图像编辑器。 大量数据、需要频繁重绘的场景,如某些类型的数据可视化。

SVG:

需要与图形元素互动的应用。 描述复杂的界面布局,如图表和图形。 当你需要可缩放的图形,例如地图。 图形的描述可以用为 CSS 和 JS 易于访问的 DOM 结构表示时。 最后,根据具体的需求和应用场景,可能会同时使用 canvas 和 SVG。

# 2.Canvas中拾取是怎么做的?