В начале приложения сохраните начальную ширину окна и размер начала холста.
var originalWindowWidth=window.innerWidth;
var canvas=document.getElementById('canvas');
var originalCanvasWidth=canvas.width;
var originalCanvasHeight=canvas.height;
Прислушайтесь окном изменения размера события
Вычислить, сколько шириной окна измененных
scale=window.innerWidth/originalWindowWidth;
Если содержание холста полный & неизменен, вы можете изменить масштаб ваш холст с помощью CSS. Таким образом, вам не нужно перерисовывать содержимое холста.
4a. (Вариант # 1) Масштабирование с помощью CSS:
// rescale both CSS width & height by the SAME SCALE FACTOR
$('#canvas').css('width',originalCanvasWidth*scale);
$('#canvas').css('width',originalCanvasWidth*scale);
Если содержание холста не полный & неизменного, вы должны изменить масштаб вашего самого холста элемента. Это приводит к потере всего содержимого холста, поэтому вы должны его перерисовать. Вы можете использовать команду context.scale
для автоматического перерисовки содержимого по новому масштабному коэффициенту. Использование этого метода также с меньшей вероятностью приведет к пиксельному контенту и изменению размера с помощью CSS, который «растягивается» & «сжимает» существующие пиксели, чтобы соответствовать новому размеру CSS.
4b. (Вариант № 2) Масштаб самого холста элемент
var canvas=document.getElementById("myCanvas");
var ctx=canvas.getContext("2d");
canvas.width=originalCanvasWidth*scale;
canvas.height=originalCanvasHeight*scale;
context.scale(scale,scale);
// now reissue all the drawing commands
// (no need to adjust coordinates or sizes -- context.scale does that for you!
http://stackoverflow.com/questions/1664785/resize-html5-canvas-to-fit-window –
Но что объекты внутри? Если нарисовать квадрат 10x10, а затем увеличить размер окна на 100%, будет ли мой квадрат 20x20? Что, если мне понадобится нарисовать еще один квадрат 10x10 - я бы хотел, чтобы он автоматически масштабировался с новым размером браузера. Он должен знать размер окна до того, как он нарисует себя, да? – forty2011111