任何 DOM 元素都可以根据此页面调整大小:http: //jqueryui.com/demos/resizable/
但是,这似乎不适用于 CANVAS 元素。可能的?
任何 DOM 元素都可以根据此页面调整大小:http: //jqueryui.com/demos/resizable/
但是,这似乎不适用于 CANVAS 元素。可能的?
Canvas 有两种类型的调整大小行为:
这是一个演示两种“调整大小”的页面:http: //xavi.co/static/so-resizable-canvas.html
如果您想要第一种类型的调整大小(拉伸内容),则将画布放入容器中并使用 CSS 将画布的 and 设置为 100 % div
。以下是该代码的样子:width
height
/* 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();
第二种调整大小(静态内容)是一个两步过程。首先,您必须调整 canvas 元素的width
和height
属性。不幸的是,这样做会清除画布,因此您必须重新绘制其所有内容。这是执行此操作的一些代码:
/* 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上重新绘制画布,但是 resize 事件经常发生,并且重新绘制是昂贵的操作——谨慎使用。
关于使用这个,画布坐标系统有一个有趣的怪癖:
#stretch canvas {
width: 100%;
height: 100%;
}
(来自上面的例子)
您必须使用这些 CSS 规则,因为您不能在画布的宽度/高度属性中指定 %。但是,当您尝试仅使用这些规则在其上绘制对象时,您会发现得到意想不到的结果——绘制的对象看起来被压扁了。这是上面的 CSS,带有画布边框......
/* The CSS */
#stretch {
width: 200px;
height: 100px;
}
#stretch canvas {
border:1px solid red;
width: 100%;
height: 100%;
}
画布被绘制到正确的大小,并且正确实现了边框规则。在其他地方的代码中添加的蓝色矩形应该用 20px 的填充填充画布,但这并没有发生:
要解决此问题,请确保您还为画布元素指定了宽度和高度(在 HTML 中或在带有 setAttribute 的 javascript 中):
canvas.setAttribute('width', '200');
canvas.setAttribute('height', '100');
或者
<canvas width=200 height=100></canvas>
现在,当我刷新页面时,我得到了我的预期:
这种“双重检查”将确保画布是使用正确的坐标系绘制的,并且仍然允许通过 CSS 规则调整其大小。如果这是一个错误,我相信它会在适当的时候修复。
这只是提供修复,但您可以在此处阅读更多内容
那么为什么不在画布元素之前应用一个 div 并调整该元素的大小,当它停止时在画布中应用宽度和高度,然后重绘画布。