我正在研究项目我需要在SVG和Canvas之间进行选择。我发现SVG在大多数情况下都是最好的。
你有什么不能用SVG做但你可以使用Canvas吗?
答案 0 :(得分:4)
<强>首先,强>
如果您已经在SVG学习曲线上投入了大量时间,那么您很可能在没有Canvas的情况下完成项目,因为这两个元素的功能非常相似。 Canvas有一个相当大的&amp;陡峭的学习曲线,你可能想避免“中期项目”。
与流行观点相反...... Canvas和SVG都使用矢量绘图命令!
他们使用矢量命令在绘图表面上绘制线条和曲线。 Canvas和SVG都将这些图形作为像素渲染到其元素表面上。
并... 强>
Canvas和SVG都可以对图形进行变换(偏移,旋转和缩放)。 Canvas和SVG都可以将样式应用于其绘图(填充颜色,笔触颜色,不透明度等)。
<强>可是... 强>
SVG更进一步,“记住”所有绘图命令。这意味着即使在缩放时,SVG也可以重新发出这些绘图命令。因此,SVG非常适合必须缩放而不会变得“锯齿”的图纸。您甚至可以使用CSS重新设计图纸样式(更改颜色,不透明度,位置,旋转等)。这通常非常有用。例如,你可以让一个SVG豹子用CSS改变它的斑点颜色
Canvas只是“吸引并忘记” - 它没有记住它被绘制的内容或位置。因此,它是一个更轻的元素。你说:“但帆布会让所有那些带有移动玩家的游戏”。使用canvas,编程实践是擦除画布并在新位置重绘任何形状。这给人一种错觉,即命令移动形状(它们不是)。 Canvas在这些重绘时非常快,并且可以轻松地以每秒60帧的速度重绘适度复杂的游戏场景。这个速度需要付出代价。你必须“记住”场景元素的位置,以便以后可以在新的位置和新的样式中重新渲染它们。 (没有简单的CSS能力使画布豹改变其斑点)。
SVG图纸附带已经内置的传统鼠标事件。画布仅在画布上作为一个整体而不是在单个图形上激发传统鼠标事件(因为画布忘记了它绘制的形状)。因此,如果您想获得与单个画布形状相关的鼠标事件,您必须(1)记住您绘制形状的位置(2)在整个画布上侦听鼠标事件,(3)检查鼠标是否在任何形状内(这可以通过数学方式轻松完成)然后为您发现的形状处理鼠标事件。 Canvas元素需要更多代码才能实现。
恕我直言,画布闪耀的一个特殊用例:
除了这些功能差异外,Canvas还允许您检查和更改画布表面上的任何像素。特别是,这些有价值的像素信息让您可以使用图像执行一些不错的任务:
答案 1 :(得分:0)
Canvas是pixel manipulation元素。
我觉得这两者之间的区别超出了StackOverflow的范围,因为它与计算机艺术基础有关,而不是编程,如果不是在WikiPedia中的搜索引擎中有很多可用的信息。例如,可以使用基于像素的媒体进行像素游戏。