描かれたものをクリアせずにHTML5キャンバスを動的に拡張する方法はありますか?
-
18-09-2019 - |
質問
見る これ
出力がページの下部に到達したら、キャンバスを自動的に拡張して、継続できるようにしたいと思います。 Canvas.heightプロパティを設定しようとしましたが、ウィンドウがクリアされます。これを行う方法はありますか?
解決
私がやること:
キャンバスと同じサイズのダミーキャンバスを作成します。
dummyCanvas.getContext('2d').drawImage(yourCanvas, 0, 0);
newCanvas = recreate(yourCanvas);
newCanvas.getContext('2d').drawImage(dummyCanvas);
それほどきれいではありません。特に、キャンバスを1秒以上再作成する必要がある状況では...他の答えを見ることに興味があります... ClientWidth/ClientHeightが変更されたときにキャンバスをサイズ変更するだけなので、それは私のために働きます[ウィンドウ.Onresize
他のヒント
しかし、これは今のような古いものであることを知っています:
Itzwartyが説明するように、キャンバスを再現する必要はありません。あなたはこれを行うことができます:
<html>...
<canvas id="canvas"></canvas>
<canvas id="buffer" style="display:none;"></canvas>
...
</html>
そうすれば、これはあなたのJavaScriptになります:
var canvas = document.getElementById('canvas');
var buffer = document.getElementById('buffer');
window.onresize = function(event) {
var w = $(window).width(); //Using jQuery for easy multi browser support.
var h = $(window).height();
buffer.width = w;
buffer.height = h;
buffer.getContext('2d').drawImage(canvas, 0, 0);
canvas.width = w;
canvas.height = h;
canvas.getContext('2d').drawImage(buffer, 0, 0);
}
ここでは、キャンバスのサイズのみを変更し、画像をコピーします。確かではありませんが、パフォーマンスは少し良くなり、私の意見では、よりシンプルで理解しやすいと思います。
所属していません StackOverflow