キャンバス要素をパーセンテージで設定しても、絶対ピクセルで設定する必要がある実際のキャンバスサイズは設定されません。ここで何が起こるかというと、デフォルトサイズのキャンバスが取得され、それがhtmlレンダリングによって引き伸ばされてぼやけた外観になります。
そのため、f.exを使用してサイズを設定する必要があります。絶対ピクセル単位のウィンドウのサイズ。
あなたはこのようにこれを行うことができます(ここでフィドルの更新:http://jsfiddle.net/x5LpA/3/)-
ウィンドウサイズに基づいてキャンバスサイズを設定する関数を作成します(もちろん、バーの高さなどを差し引く必要がありますが、原則を示すためです)。
function initCanvasArea(cnv) {
cnv.width = window.innerWidth;
cnv.height = window.innerHeight;
}
キャンバスのサイズが変更されるとキャンバスのコンテンツがクリアされるため、毎回コンテンツを再度レンダリングする必要があります。そのため、レンダリングコンテンツをf.exのような別の関数に抽出するのが賢明です。
function renderCanvas(ctx) {
ctx.fillStyle = "rgb(200,0,0)";
ctx.fillRect(0, 0, 55, 50);
ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
ctx.fillRect(20, 20, 55, 50);
}
次に、main関数を自己呼び出し関数にし、windo.resizeのイベントハンドラーをアタッチしてキャンバスを更新します。
$(function () {
var canvas = $('#le_canvas')[0];
var ctx = canvas.getContext('2d');
initCanvasArea(canvas);
renderCanvas(ctx);
window.onresize = function(e) {
initCanvasArea(canvas);
renderCanvas(ctx);
};
})();
最後に、幅/高さを100%に設定して、CSSルールを編集します。
#le_canvas {
position:absolute;
}
(ヒント:ここでのより良いアプローチはfixed
、位置の属性を使用することです。さらに、ラッパー要素、パディング、ボックスサイズ設定を使用します。ただし、これはこの質問の範囲外です)。