HTML5画布调整为父级

Gio*_*hal 15 javascript html5 dom canvas html5-canvas

我想调整canvas元素的大小,以便在适合其父元素时,无论是<body>("全屏")还是某些<div>(例如).这是我的尝试:

// called at each frame
function update() {
    var canvasNode = document.getElementById('mycanvas');
    canvasNode.width = canvasNode.parentNode.clientWidth;
    canvasNode.height = canvasNode.parentNode.clientHeight;
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,帆布不会停止增长!也许client*不是正确的参数?

请参阅此处的代码:http: //jsfiddle.net/ARKVD/24/

Sim*_*ris 13

最简单的方法是始终将画布保留在自己的div中.

在这个div中唯一能做的就是画布.

然后你可以使用CSS来调整你想要的div.你想要它和身体一样大吗?给div width: 100%.

然后你可以随时正确地做:

canvas.width = theDiv.clientWidth;
canvas.height = theDiv.clientHeight;
Run Code Online (Sandbox Code Playgroud)

如果你这样做,你将不必担心当身体是div的直接父母时你正面临的奇怪问题.

  • 这不起作用(至少在Chrome中).如果包含div的宽度/高度为100%,它仍然会不断增长.见这里http://jsfiddle.net/aakv7L7f/ (4认同)

小智 6

您可以通过打破父节点和子节点之间的循环依赖来解决该问题。DOM 元素的大小分配只能自上而下传播(从父级到子级)。您可以通过设置来确保子元素(画布)不会影响父元素的大小

canvasNode.style.position = 'absolute';
Run Code Online (Sandbox Code Playgroud)

这会将其放入独立于父级的自己的文档流中。