ctx.clearRect(0,0、canvas.width、canvas.height)を使用する場合の問題は、変換行列を変更した場合、キャンバスを適切にクリアできない可能性があることです。
ソリューション?キャンバスをクリアする前に、変換行列をリセットします。
//現在の変換行列を保存しますctx.save();
//キャンバスをクリアするときに単位行列を使用しますctx.setTransform(1、0、0、1、0、0); ctx.clearRect(0、0、canvas.width、canvas.height);
//変換を復元しますctx.restore();
編集:
Chromeは次のように適切に応答します:context.clearRect(x、y、w、h); しかし、IE9はこの命令を完全に無視しているようです。IE9は次のように応答するようです。canvas.width=canvas.width; しかし、それは線をクリアするのではなく、形、写真、その他のオブジェクトだけをクリアします。
したがって、次のように作成されたキャンバスとコンテキストがある場合:
var canvas = document.getElementById('my-canvas'); var context = canvas.getContext( '2d');
次のような方法を使用できます。
関数clearCanvas(context、canvas){context.clearRect(0、0、canvas.width、canvas.height); var w = canvas.width; canvas.width = 1; canvas.width = w; }
Edit2:
このコードを使用して、ブラウザがサポートしているかどうかを確認します。
function checkSupported() {
canvas = document.getElementById('canvas');
if (canvas.getContext){
ctx = canvas.getContext('2d');
// Canvas is supported
} else {
// Canvas is not supported
alert("We're sorry, but your browser does not support the canvas tag. Please use any web browser other than Internet Explorer.");
}
}
また、Webページの読み込み時にこのコードを実行するには、bodyタグを次のように調整します。
<body onload="checkSupported();">