2010-12-02 26 views
0

私はキャンバス要素を持っています。それをクリックするとe.clientX(Y)またはe.screenX(Y)でクリック位置を取得します。奇妙なことが起きている。 Y値は常に高すぎます。この画像を見てください:http://img840.imageshack.us/img840/268/eventq.jpgどんなイデアがそれほど高いのですか?Clickイベント位置(Y)が高すぎる

+0

は、ページ上の最初の/先頭の要素canvas要素ですか?スクリーンショットではページの上部が見えません。 ClientYは現在の要素ではなく、ページ(ビューポート)自体に関連しています。 – Fosco

+0

テキストがありません...キャンバス要素を基準にしてそれを取得する方法はありますか? – thomas

答えて

0

私はかなりあなたが何が起こっているかを伝えることができると確信しています。キャンバスに相対的な座標はなく、ビューポートを基準にした座標です。また、パディングを含むかどうかはブラウザによって異なります。

通常の座標に変換します。あなたの場合、これはキャンバスのオフセットを差し引くことを含む。

+0

Firefox 3.6でoffsetXが動作しない – thomas

+0

申し訳ありませんが、offsetXを使用しないで、投稿を編集しました – buddhabrot

1

あなたはClientXとYを取り、キャンバスの位置をそれらから減算するだけです。

この例では、単に手順を表示するために、不必要に冗長です:

var canvas = document.getElementById('game'); 
var canvasX, canvasY; 

canvas.addEventListener('click', function(event) { 
    canvasX = canvas.offsetLeft; 
    canvasY = canvas.offsetTop; 
    var eventX = event.clientX; 
    var eventY = event.clientY; 
    var relX = eventX - canvasX; 
    var relY = eventY - canvasY; 
    alert('X = ' + relX + ', Y = ' + relY); 
}); 

ワーキングサンプル:http://jsfiddle.net/JfhJF/

関連する問題