このページに従って、任意のDOM要素のサイズを変更できます。 http://jqueryui.com/demos/resizable/
ただし、これはCANVAS要素では機能しないようです。可能?
Canvasには、次の2種類のサイズ変更動作があります。
これは、2種類の「サイズ変更」を示すページです。 http://xavi.co/static/so-resizable-canvas.html
最初のタイプのサイズ変更(コンテンツのストレッチ)が必要な場合は、キャンバスをコンテナーdiv
に配置し、CSSを使用してキャンバスのwidth
とheight
を100%に設定します。 。そのコードは次のようになります。
/* 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();
2番目のタイプのサイズ変更(静的コンテンツ)は、2段階のプロセスです。まず、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 でキャンバスを再描画することは可能ですが、サイズ変更イベントはかなり頻繁に発生し、再描画はコストのかかる操作です-注意してアプローチしてください。
これを使用することに関して、キャンバスの座標系には少し面白い癖があります:
#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のパディングを埋めるはずですが、これは発生していません。
これを修正するには、alsoがcanvas要素の幅と高さを指定していることを確認してください(HTMLまたはsetAttributeを使用したJavaScriptで)。
canvas.setAttribute('width', '200');
canvas.setAttribute('height', '100');
または
<canvas width=200 height=100></canvas>
ページを更新すると、期待どおりの結果が得られます。
この「ダブルチェック」は、キャンバスが正しい座標系を使用して描画されていることを確認し、CSSルールを介してサイズを変更できるようにします。これがバグである場合、私はそれがやがて修正されると確信しています。
これは修正を提供することだけですが、詳細を読むことができます ここ
さて、canvas要素の前にdivを適用し、その要素のサイズを変更してみませんか。停止したら、canvasに幅と高さを適用してから、canvasを再描画します。