2016-06-05 11 views
0

Я реализовал перетаскивание изображений, и теперь я хочу ограничить пропорции изображений при изменении размера.сжимать пропорции при изменении размеров изображений

/** 
* Variable: constrainChildrenOnResize 
* 
* Specifies if children should be constrained according to the <constrainChildren> 
* switch if cells are resized (including via <foldCells>). Default is false for 
* backwards compatiblity. 
*/ 
mxGraph.prototype.constrainChildrenOnResize = false; 

я установить это правду, но он не работает: с

Что API/свойство мне нужно для этой функции ..

ответ

0

constrainChildrenOnResize отвечает за позиционирование и размером детей измененной клетки , Это означает, что дети должны сохранять свое положение относительно родительской клетки.

В вашем случае я предлагаю продлить mxVertexHandler с использованием метода union. В this example вы можете увидеть, как реализовать ограничения min-width/min-height. Используя этот пример, вы можете написать свои собственные правила для ограничения.

Вот мое простое решение:

var vertexHandlerUnion = mxVertexHandler.prototype.union; 
mxVertexHandler.prototype.union = function (bounds) { 

    var result = vertexHandlerUnion.apply(this, arguments); 
    var coff = bounds.width/bounds.height 
    result.width = result.height * coff; 

    return result; 
}; 

Так эта функция вызывается каждый раз, когда вы перемещаете мышь во время перетаскивания Resizer.

граница - объект, всегда одинаковый и представляет собой старую геометрию ячейки (перед изменением размера)

результате - объект, представляет новые значения, которые будут применяться. Между этой строкой объявление return вы можете разместить любой код, необходимый для изменения результата.

В моем простом примере я просто получаю начальное соотношение между шириной и высотой ячейки (coff), а затем устанавливаем новую ширину, умножая кофф и новую высоту. Он будет работать, если вы перетащите угол, сверху или снизу. В реальном проекте эта логика должна быть слегка расширена, или вы должны сделать видимыми только обработчики углов.

Кстати, этот код будет работать для всех изменяемых размеров ячеек на вашем графике. Если вы хотите применить его только к изображениям или некоторым другим типам ячеек - вы можете поместить условие и проверить тип ячейки перед пересчетом. Вы можете получить текущую ячейку или ее состояние через this.state.cell или this.state внутри функции соединения. Например, только для вертеков:

... ... 
var result = vertexHandlerUnion.apply(this, arguments); 
if (this.state.cell.isVertex()) { 
    //calculations here 
} 
return result;