2013-05-27 3 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 для изменения размера)? Может ли кто-нибудь дать совет для меня, если я переписал методы _mouseStart и _mouseDrag jquery.ui.resizable?

ответ

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

Я пробовал ваш патч, но он ломается, если вы меняете угол ex; 200 градусов. –

Смежные вопросы