2016-06-05 9 views
0

Ich habe Drag & Drop von Bildern implementiert und jetzt möchte ich die Proportionen von Bildern bei der Größenanpassung beschränken.Beschränken Sie Proportionen bei der Größenanpassung von Bildern

/** 
* 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; 

i auf true gesetzt ist, aber es funktioniert nicht: s

Welche API/Eigenschaft i für diese Funktionalität benötigen ..

Antwort

0

constrainChildrenOnResize ist verantwortlich für die Positionierung und Größe der Kinder Größe veränderte Zelle . Es bedeutet, dass Kinder ihre Position relativ zur Elternzelle behalten sollten.

In Ihrem Fall würde ich empfehlen, mxVertexHandler mit union Methode zu erweitern. In this example können Sie sehen, wie Sie die Mindestbreite/Mindesthöhe implementieren. Mit diesem Beispiel können Sie Ihre eigenen Regeln für Constrain schreiben.

Hier ist meine einfache Lösung:

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; 
}; 

Also diese Funktion jedes Mal, wenn Sie die Maus bewegen, um die Resizer während Ziehen genannt wird.

Grenzen - Objekt, immer gleich und alte Geometrie der Zelle darstellen (vor Ändern der Größe)

Ergebnis - Objekt stellt neue Werte, die angewandt werden wollen. Zwischen dieser Zeile ad return Anweisung können Sie jeden Code platzieren, den Sie benötigen, um das Ergebnis zu ändern.

In meinem einfachen Beispiel bekomme ich nur die ursprüngliche Beziehung zwischen Breite und Höhe der Zelle (Coff) und dann neue Breite durch Multiplizieren Coff und neue Höhe. Es funktioniert, wenn Sie die Ecke oder oben/unten ziehen. Im realen Projekt sollte diese Logik leicht erweitert werden, oder Sie sollten nur Eckenhandler sichtbar machen.

Übrigens funktioniert dieser Code für alle resizierbaren Zellen in Ihrem Diagramm. Wenn Sie es nur auf Bilder oder andere Arten von Zellen anwenden möchten, können Sie die Bedingung festlegen und den Zellentyp vor der Neuberechnung überprüfen. Sie können die aktuelle Zelle oder ihren Status über this.state.cell oder this.state innerhalb der Union-Funktion abrufen. Zum Beispiel nur für Vertefizien:

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