私はkineticjsを使用して、キャンバスにウィジェットを描画しています。このウィジェットは幅600ピクセルで、いくつかの長方形(デフォルトでは24)で構成されています。この長方形の上で、他の長方形をドラッグできます。これを「カーソル」と呼びましょう。
スムーズなドラッグの代わりに、マウスが十分に離れている場合にのみカーソルを他の長方形にジャンプさせたい(必要に応じて段階的なドラッグのように)。
たとえば、カーソルが0,0にあり、合計24個の長方形がある場合、マウスが25,0(600px /24個の長方形=25px)にあるときにのみ、カーソルを次の長方形に移動させます。
だから私はそれを実装しました:
cursor.setDragBoundFunc(function(pos){
var caseSize = WIDTH / caseNum;
var posX = Math.round(pos.x/caseNum) * caseSize;
if(posX > (WIDTH - caseSize)) {
posX = WIDTH - caseSize;
}
if(posX < 0 ) {
posX = 0;
}
return {
x: posX,
y: cursor.getAbsolutePosition().y
}
});
問題はpos.x
、キャンバス内のマウスの位置ではなく、ドラッグイベントの開始からのマウスの位置を表すことです(キャンバスの中央からドラッグを開始しても、posは0,0になります)。
ここに問題の例があります:http://jsfiddle.net/H9rpz/
キャンバス内のマウスの位置を取得するにはどうすればよいsetDragBoundFunc()
ですか?
ありがとう