Gibt es eine Möglichkeit, die HTML5 -Leinwand dynamisch zu erweitern, ohne zu klären, was darauf gezogen wird?
-
18-09-2019 - |
Frage
sehen Dies
Wenn die Ausgabe den unteren Teil der Seite erreicht, möchte ich, dass sich die Leinwand automatisch so erstreckt, dass sie weitergehen kann. Ich habe versucht, die Eigenschaft von Canvas. -Height festzulegen, aber es löscht das Fenster. Gibt es eine Möglichkeit, dies zu tun?
Lösung
Was ich mache:
Erstellen Sie Dummy -Leinwand mit gleicher Größe wie Ihre Leinwand.
dummyCanvas.getContext('2d').drawImage(yourCanvas, 0, 0);
newCanvas = recreate(yourCanvas);
newCanvas.getContext('2d').drawImage(dummyCanvas);
Nicht sehr hübsch, insbesondere in Ihrer Situation, in der Sie die Leinwand 50+ Mal pro Sekunde nachbauen müssen ... Interesse an anderen Antworten ... es funktioniert für mich, weil ich nur die Größe der Leinwand bei der Clientbreite/ClientHeight ändert [Fenster [Fenster .onResize
Andere Tipps
Ich weiß jedoch, dass dies jetzt irgendwie alt ist:
Sie müssen die Leinwand nicht neu erstellen, wie Itzwarty erklärt. Du kannst das:
<html>...
<canvas id="canvas"></canvas>
<canvas id="buffer" style="display:none;"></canvas>
...
</html>
Dann wäre dies Ihr 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);
}
Hier ändern Sie nur die Größe der Leinwände und kopieren über das Bild. Ich bin mir nicht sicher, aber ich glaube, die Leistung ist etwas besser und es ist meiner Meinung nach einfacher und einfacher zu verstehen.