2012-05-12 1 views

答えて

3

ダートは今getBoundingClientRect場合、同期バージョンを持っているので、あなたはもう非同期バージョンを使用する必要はありません。

var clientRect = ctx.canvas.getBoundingClientRect(); 

ctx.canvas.on.click.add((e) { 
    var x = e.clientX - clientRect.left; 
    var y = e.clientY - clientRect.top; 
}); 

あり、同じことを行うのMouseEventで「offsetX」と「offsetY」ゲッターもあるが、私は、彼らが標準ではないため、これらのフィールドは、その永遠になるかはわかりません。

+0

良い点、更新いただきありがとうございます。 –

+0

Dart 1.0が出力されており、オフセットがまだ存在しています。どちらを使うのが最適ですか?クライアントとboundingRectまたはオフセット? – GameAlchemist

6

この答えが古くなって、

上記の受け入れ答えは簡単Pointクラスの作成を参照してください:

class Point { 
    final int x; 
    final int y; 

    Point(this.x, this.y); 
} 

インポートダーツ:HTMLライブラリ:

import 'dart:html'; 

まずステップを取得キャンバスのクライアント境界矩形:

Point clientBoundingRect; 
Future<html.ElementRect> futureRect = ctx.canvas.rect; 

futureRect.then((html.ElementRect rect) { 
    clientBoundingRect = new Point(rect.bounding.left, rect.bounding.top); 
}); 

次に、ウィンドウからキャンバスまでのオフセットアルゴリズムを定義します。

Point getXandY(e) { 
    num x = e.clientX - clientBoundingRect.x; 
    num y = e.clientY - clientBoundingRect.y; 
    return new Point(x, y); 
} 

次に、キャンバスにクリックイベントハンドラをアタッチ:

ctx.canvas.on.click.add((e) { 
    click = getXandY(e); 
}); 
+0

私は質問をしてすぐにそれに答えることは、そこにこの情報を得るための最良の方法ですが、いくつかは有用であると確信しています。このコードを実際に表示するためにjsfiddleを作成できますか? –

+0

jsfiddleがダーツをサポートしているとは思わない... –

+0

@SethLadd 2013年1月のダーツへのチャネージに照らしてこの例を更新できますか? –

関連する問題