http://jsfiddle.net/wRexz/4/
var dragging = false, startpoint, endpoint, midpoint = $("#center").position();
midpoint = {x:midpoint.left - 2, y:midpoint.top-2};
$("#stage").mousedown(function(e){
dragging = true;
startpoint = {x:e.offsetX, y:e.offsetY};
});
$("#stage").mouseup(function(e){
dragging = false;
});
$("#stage").mousemove(function(e){
if (dragging){
var angle = 0, sp = startpoint, mp = midpoint;
var p = {x:e.offsetX, y:e.offsetY};
var sAngle = Math.atan2((sp.y-mp.y),(sp.x - mp.x));
var pAngle = Math.atan2((p.y-mp.y),(p.x - mp.x));
angle = (pAngle - sAngle) * 180/Math.PI;
$("#display").text(angle);
$('#rotateme').css({ rotate: '+=' + angle });
startpoint = {x:p.x, y:p.y};
}
});
これにより、2点間の相対回転角がわかります。イベントが発生するたびに更新mousemove
されるため、一度に180度を超えることはありません(中点をドラッグする場合を除く)。後者は座標系を対象としていないためMath.atan2
、ロジックが単純化されます。Math.atan