画布里面的html5画布

Vil*_*lan 10 html5 canvas

我们可以在现有画布中放置画布吗?如果可以的话,请帮助在html5中完成.

rob*_*rtc 16

有两种方法可以解释您的问题.一个是你的意思是实际嵌套canvas元素本身,如下所示:

<canvas id="outer">
    <canvas id="inner"></canvas>
</canvas>
Run Code Online (Sandbox Code Playgroud)

这是合法的(根据validator.nu)但没有意义.canvas元素内的内容用于后备.canvas使用元素内容的唯一方法是浏览器不支持canvas,在这种情况下,内部canvas元素无论如何都不会被看到.

解释问题的另一种可能方法是,您可以在一个画布中显示另一个画布.这非常简单,canvas元素可以用作第一个参数context.drawImage().如果你有两个canvas要素:

<canvas id="c1" width="200" height="200"></canvas>
<canvas id="c2" width="200" height="200"></canvas>
Run Code Online (Sandbox Code Playgroud)

然后这个脚本(使用jQuery)将在第一个上绘制canvas,然后将四次作为图像添加到第二个canvas:

var c1 = $('#c1');
var ctx1 = c1[0].getContext('2d');

ctx1.fillRect(50,50,100,100);

var c2 = $('#c2');
var ctx2 = c2[0].getContext('2d');

ctx2.drawImage(c1[0],0,0,100,100);
ctx2.drawImage(c1[0],100,0,100,100);
ctx2.drawImage(c1[0],0,100,100,100);
ctx2.drawImage(c1[0],100,100,100,100);
Run Code Online (Sandbox Code Playgroud)

但是,为什么你呢?你可以使用一个复制canvas上面第二个图像:

var c1 = $('#c1');
var ctx1 = c1[0].getContext('2d');

ctx1.fillRect(25,25,50,50);
ctx1.fillRect(125,25,50,50);
ctx1.fillRect(25,125,50,50);
ctx1.fillRect(125,125,50,50);
Run Code Online (Sandbox Code Playgroud)

总而言之:是的,这是可能的,但在简单使用中并不是必需的.

  • 也许不是,但是一个新手可能会把你的措辞意味着它过分,当它通常是更整洁和更优化的方式来完成某事.如果你有一个带有静态元素的更改画布(比如游戏),那么这种技术有很大的性能优势 - 你只需要将位图/矢量绘制到画布一次,然后在更新时将其绘制到主画面上.尽管+1给出了很好的答案. (3认同)
  • 使用第二个画布有很多(公认的非平凡)原因.例如,通过将图形复制到另一个屏幕外画布,清除主画布,然后将屏幕外画布向后偏移一个像素并在缺失列中绘制新数据,最简单地绘制移动图形.(仅当图形的背景透明时才需要这样做.) (2认同)