2013-05-27 101 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度。 –