2011-12-24 3 views
12

<body>( "フルスクリーン")であるか、または<div>であるかにかかわらず、キャンバス要素のサイズを親に合わせるようにしたいです。これは私の試みです:HTML5キャンバスが親にリサイズする

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

何かの理由で、キャンバスは成長を停止しません!たぶんclient*は正しいパラメータではありませんか?

はここにアクションでコードを参照してください: http://jsfiddle.net/ARKVD/24/

+1

高さが155pxの場合、ボディは '160px'と高くなり、毎回キャンバスが「5px」ずつ増え続けます(キャンバスが成長するたびにボディが5px先に見えます)。あなたがすべての余白/パディングを '0px'に設定して以来、私はなぜ、どうしていいのか分かりません。 (これはChrome上です) – pimvdb

+0

Linux/Firefoxでは、4pxまたは3pxのオフセットが表示されています(ウィンドウが最大化されているかどうかによって異なります)...迷惑です! –

+0

奇妙なことは、キャンバスが '0px'の高さに設定されている場合、ボディは' 20px'です。キャンバスが実際に削除された場合、ボディは '0px'にのみ折りたたまれます。 – pimvdb

答えて

8

一番簡単な方法は、常に独自のdivにキャンバスを維持することです。これまで、このdiv要素になります

唯一のものはキャンバスです。

次に、あなたが欲しいしかし、div要素のサイズを変更するためにCSSを使用することができます。あなたはそれを体のように大きくしたいですか? div width: 100%を与えてください。

その後、あなたは常に当然行うことができます。

canvas.width = theDiv.clientWidth; 
canvas.height = theDiv.clientHeight; 

あなたがこれを行う場合は、体はdiv要素の直接の親であるときは、現在直面している奇妙な問題を心配する必要はありません。

+1

なぜボディでは機能しないのか説明できますか(つまりDIVが必要な理由)? –

+0

divを持つボディと同じ大きさにしたい場合は、CSSで幅と高さを指定することができます(幅100%など)。 100%の幅では必ずしもボディの 'clientWidth'と同じ大きさになるとは限りません。代わりに、bodyのclientWidthとHeightとは異なる(より小さい)、CSS仕様で呼び出される "包含ブロック"と同じ大きさになります。まずは:http://jsfiddle.net/9FyNZ/ –

+0

ありがとう!これは私が持っていた非常に迷惑な問題を解決しました。 – Brad

0

私は同じ問題が起こっを発見した、と私はそれを回避するために見つけることができる唯一の方法は、parentHeightにキャンバスの高さを設定することでした - 1.これはCEFを使用していました。 thisフィドルでは、私はparentHeightに設定する必要がありました - 5.

canvasNode.height = div.clientHeight - 5; 
0

あなたは親ノードと子ノード間の循環依存を壊すことで問題を回避することができます。 DOM要素のサイズ割り当ては、トップダウン(親から子へ)だけ伝播する必要があります。あなたは子要素(キャンバス)これは親から独立した独自のドキュメントフローにそれを置く

canvasNode.style.position = 'absolute'; 

を設定することにより、親のサイズには影響しないことを確実にすることができます。

1

私はクリーンなアプローチは、単にリサイズ時にことになってどのように大きなcanvas要素を「思い出させる」ことであることを発見しました:

window.onresize = function() { 
    canvas.style.width = '100%'; 
    canvas.height = canvas.width * .75; 
} 

この場合には設定高さがあり、単純に4を維持することです:3比。もちろん、あなたが望むならば100%にすることもできます。

関連する問題