Есть ли способ динамически расширить холст HTML5 без очистки того, что нарисовано на нем?
-
18-09-2019 - |
Вопрос
видеть это
Когда вывод достигает нижней части страницы, я бы хотел, чтобы холст автоматически расширился, чтобы он мог продолжать. Я попытался установить свойство Canvas.height, но оно очищает окно. Есть какой-либо способ сделать это?
Решение
Что я делаю:
Создайте фиктивное холст с тем же размером, что и ваш холст.
dummyCanvas.getContext('2d').drawImage(yourCanvas, 0, 0);
newCanvas = recreate(yourCanvas);
newCanvas.getContext('2d').drawImage(dummyCanvas);
Не очень красиво, особенно в вашей ситуации, когда вам потребовалось бы, чтобы вы воссоздали холст более 50 раз в секунду ... заинтересованные в том, чтобы увидеть другие ответы ... это работает для меня, потому что я просто изменяю размер холста, когда изменение Whipwidth/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);
}
Здесь вы меняете только размер холфов и копируете изображение. Я не уверен, но я считаю, что производительность немного лучше, и, на мой взгляд, это проще и проще для понимания.