2013-05-27 60 views
4

问题:jQuery UI的调整大小:调整旋转的物体

jQuery的用户界面调整大小似乎并没有对旋转的物体正常工作。旋转元素之后,手柄将执行与未旋转元素相同的操作。

的想法:

轴大概可以根据旋转矩阵(http://en.wikipedia.org/wiki/Rotation_matrix)旋转。所以我想我们可以通过x' = x*cos(a) -y*sin(a); y' = x*sin(a) + y*cos(a)获得更新的鼠标坐标。

有没有人看到类似的解决方案(补丁,或独立的jquery插件调整大小)? 任何人都可以给我一个建议,如果我会重写一个jquery.ui.resizable的_mouseStart_mouseDrag方法吗?

回答

5

好了,最后我回到了我的问题,并得到了一些进展:https://github.com/andyzee/jquery-resizable-rotation-patch 我决定不使用旋转矩阵现在(虽然,它的实际工作),但切换处理

function switchAxis(axis, angle) { 
    while(angle >= 360) angle = 360-angle; 
    while(angle < 0) angle = 360+angle; 
    var axisArray = ["n", "ne", "e", "se", "s", "sw", "w", "nw"]; 
    var octant = Math.round(angle/45); // 0 .. 7 
    var index = 0; 
    if ([].indexOf) { 
     index = axisArray.indexOf(axis); 
    } else { 
     for(var i=0; i<axisArray.length; i++) { 
      if (axisArray[i] === axis) index = i; 
     } 
    } 
    var newAxisIndex = (index + octant) % 8; 
    return axisArray[newAxisIndex]; 
} 

我一定会继续我的搜索,并可能会写出自己的解决方案。

+1

谢谢@Andy Zee,我在这里尝试了另一种方法http://jsfiddle.net/unloco/ors6d3xe/ – UnLoCo

3

这里是我公司开发的Andy Zee工作大量迁入基于

JSFiddle

它基本上改变了DX,DY,根据角度补丁

ndx = dx * Math.cos(angle_rad) + dy * Math.sin(angle_rad); 
ndy = dy * Math.cos(angle_rad) - dx * Math.sin(angle_rad); 

它也改变了手柄的行为和不由旋转元素调整大小引起的位置更正(posted here

+0

我试过了你的补丁,但是如果你改变了角度,它会中断; 200度。 –