【发布时间】:2012-08-23 19:04:44
【问题描述】:
我正在使用 javascript 绘制到包含在包装器中的 div 内的画布元素。 画布及其 div 是通过添加到包装器的 innerHTML 来动态生成的。 目标是允许生成无限数量的画布
<div id="wrapper">
<div id="container"><canvas id="previous"></canvas></div>
<!-- infinite # of container divs & canvases -->
</div>
但是,当我将新的 div 和画布添加到包装器的 innerHTML 时,绘制到前一个画布的任何内容都会丢失。
如果我在页面的其他地方添加新的画布,添加到容器外的 div 或容器的子级:
<div id="wrapper">
<div id="container"><canvas id="previous"></canvas></div>
</div>
<div id="wrapper2">
<!-- newly inserted canvas: -->
<div id="container"><canvas></canvas></div>
</div>
或:
<div id="wrapper">
<div id="container"><canvas id="previous"></canvas></div>
<div id="wrapperChild">
<!-- newly inserted canvas: -->
<div id="container"><canvas></canvas></div>
</div>
</div>
然后保留之前的画布。
据我所知,更改包装器的 innerHTML 或其父级会导致清除画布。关于如何避免清除画布的任何建议?我可以保留在其他地方绘制到画布上的内容并恢复它吗?
【问题讨论】:
-
是否使用 DOM 代替
innerHTML清除画布?我的意思是,您可以将当前画布绘制到临时画布上,然后将其绘制回来,但这对于许多画布来说几乎是不可行的。innerHTML需要重组当前节点,这可能是清除画布的原因。如果可以,请使用 DOM 并避免使用innerHTML。 -
另一种可能的方法是 insertAdjacentHtml
标签: javascript html canvas innerhtml