Ответ 1
Canvas имеет два типа поведения изменения размера:
- Изменение размера, в котором содержимое растянуто, чтобы соответствовать новым размерам холста
- Изменение размера, когда содержимое остается статичным, когда холст растет или сжимается
Здесь страница, демонстрирующая два типа "изменения размера": http://xavi.co/static/so-resizable-canvas.html
Если вам нужен первый тип изменения размера (растянуть контент), поместите холст в контейнер div
и установите для width
и height
холста 100% с помощью CSS. Вот как выглядит этот код:
/* The CSS */
#stretch {
height: 100px;
width: 200px;
}
#stretch canvas {
width: 100%;
height: 100%;
}
<!-- The markup -->
<div id="stretch"><canvas></canvas></div>
// The JavaScript
$("#stretch").resizable();
Второй тип изменения размера (статический контент) - это двухэтапный процесс. Сначала вы должны настроить атрибуты width
и height
элемента canvas. К сожалению, это очищает холст, поэтому вы должны повторно рисовать все его содержимое. Здесь бит кода, который делает это:
/* The CSS */
#resize {
height: 100px;
width: 200px;
}
<!-- The markup -->
<div id="resize"><canvas></canvas></div>
// The JavaScript
$("#resize").resizable({ stop: function(event, ui) {
$("canvas", this).each(function() {
$(this).attr({ width: ui.size.width, height: ui.size.height });
// Adjusting the width or height attribute clears the canvas of
// its contents, so you are forced to redraw.
reDraw(this);
});
} });
В настоящее время код выше повторно рисует содержимое холста, когда пользователь перестает изменять размер виджета. Можно перерисовать холст на resize, однако события изменения размера происходят довольно часто, а повторные розыгрыши - дорогостоящие операции - осторожно подходите.