使用图层或z-index在画布上绘制形状/文本

时间:2011-02-24 21:40:26

标签: html5 canvas

我使用for循环绘制了几个文本元素。 但我想要在所有其他元素之上绘制第一个元素。 除了反转循环之外,还有一种方法可以为文本或形状等绘制元素定义图层编号吗?

2 个答案:

答案 0 :(得分:5)

不,HTML5 Canvas-like SVG在渲染时使用"painters model":你放下的墨水会立即在画布上干掉;连续绘制调用会在结果之上进行。

此外,HTML5 Canvas(与SVG或HTML不同)使用non-retained (or immediate) graphics mode:在发出原始绘图命令后,不会保留任何对象。

您的选择是:

  • 更改循环,或以其他方式实现您自己的分层系统,该系统将绘制调用排队,然后按顺序从下到上发布。

  • 正如@Stoive建议的那样,以编程方式创建单独的(未显示的)画布元素,绘制它们,然后按照您喜欢的顺序将结果重新显示回主画布。

  • 在页面上创建多个(显示的)画布,并使用CSS对它们进行分层,将每个画布作为自己的图层绘制。

最后一个选项可以让您获得最大的自由,包括随时弄脏/清除其中一个图层的功能,或者重新排序图层而无需自行重新组合。

答案 1 :(得分:0)

在2D上下文中canvas中没有层的概念 - 将其视为可编程画笔式应用程序。

然而,您可以使用context.drawImage将一个画布绘制到另一个画布上 - 所以如果您在其自己的画布中维护每个“图层”,然后将它们组合成一个用于显示的画布,则可以模拟图层的概念