2017-02-06 15 views
0

キャンバスに図形を描画するHTML5アプリケーションで作業しています。形状は自由な図面を使用してユーザーによって描かれます。ズーム後にキャンバスに描画

私はズーム実施し、この回答のおかげ:キャンバスがズームされると、ユーザが描画し続けるとhttps://stackoverflow.com/a/6776341/

はしかし、行はオフセットで表示されます。問題はポイントを平行移動して、カーソルの下に線が再び描画されるようにすることです。

答えて

0

<canvas>要素からマウス座標を取得すると、要素の高さと幅は、DOMに関する限りです。キャンバスのコンテキストをどのようにスケーリングしたかに基づいて変更されることはありません。カーソルの下のキャンバスの座標を取得するには、キャンバスの現在の変換に合わせてキャンバスの座標を変換する必要があります。

// mouse event coordinates 
var mouseX; 
var mouseY; 

// current canvas transforms 
var originX; 
var originY; 
var scale; 

// adjust mouse coordinates with canvas context's transforms 
var canvasX = mouseX/scale + originX; 
var canvasY = mouseY/scale + originY; 

// should draw a rectangle with the cursor being directly in the center 
context.fillRect(canvasX - 10, canvasY - 10, 20, 20); 
+0

ありがとうございました。私はこのサンプルアプリケーションで試してみましたが、うまくいきました。もう少し小さい質問です:彼の例では、 'context.translate( - (mousex/scale + originx - mousex /(scale * zoom)) )'のようなコードがあります。私はこの部分を理解していません: ' - mousex /(scale * zoom)'。それは何ですか? – Joachim

+0

'scale * zoom'は新しい倍率です。この例では、この新しいスケールでマウス座標を分割し、古いスケールで割ったマウス座標から差し引いて、スケールの結果として原点がどの程度変化したかによって 'originx'と' originy' *を効果的に記録します。 –

+0

ありがとうございました! – Joachim

関連する問題