Erweitern auf Marc_Alx Antwort.
Durch den Aufruf von paper.translate() und paper.scale() werden die Ereignisse 'translate' und 'scale' auf dem Papier ausgelöst.
Benutzerdefinierte Elemente können diese Ereignisse auf ihrem benutzerdefinierten ElementView abhören.
Zum Beispiel, wenn Sie auf dem Mausrad Event Scale:
paper.on('blank:mousewheel', (event, x, y, delta) => {
const scale = paper.scale();
paper.scale(scale.sx + (delta * 0.01), scale.sy + (delta * 0.01),);
});
außer Kraft setzen Methoden der benutzerdefinierten machen ElementView zu 'Skala' Ereignis auf dem Papier zu hören.
Und die updateBox der benutzerdefinierten ElementView sollte den Skalierungswert vom Papier abrufen.
updateBox() {
if (!this.paper) return;
const bbox = this.getBBox({ useModelGeometry: true });
const scale = joint.V(this.paper.viewport).scale();
// custom html updates
this.$box.find('label').text(this.model.get('label'));
this.$box.find('p').text(this.model.get('response'));
// end of custom html updates
this.$box.css({
transform: `scale(${scale.sx},${scale.sy})`,
transformOrigin: '0 0',
width: bbox.width/scale.sx,
height: bbox.height/scale.sy,
left: bbox.x,
top: bbox.y,
});
}