<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);
ありがとうございました。私はこのサンプルアプリケーションで試してみましたが、うまくいきました。もう少し小さい質問です:彼の例では、 'context.translate( - (mousex/scale + originx - mousex /(scale * zoom)) )'のようなコードがあります。私はこの部分を理解していません: ' - mousex /(scale * zoom)'。それは何ですか? – Joachim
'scale * zoom'は新しい倍率です。この例では、この新しいスケールでマウス座標を分割し、古いスケールで割ったマウス座標から差し引いて、スケールの結果として原点がどの程度変化したかによって 'originx'と' originy' *を効果的に記録します。 –
ありがとうございました! – Joachim