Dies kann mit einer Kombination von JointJS Ereignissen erreicht werden und Ereignisse dokumentieren.Der Grafik-Display ist in einem div
gekapselt:
<div id='diagram'></div>
dann die Event-Handler für JointJS hinzufügen, zuerst das pointerdown
Ereignis, bei dem wir die Startposition des Schlepp speichern:
paper.on('blank:pointerdown',
function(event, x, y) {
dragStartPosition = { x: x, y: y};
}
);
Dann wird das Ende der drag (pointerup), wenn wir die Variable wir die Position speichern, löschen in (es wirkt auch als ein flag, ob es einen aktiven Widerstand im Gange ist):
paper.on('cell:pointerup blank:pointerup', function(cellView, x, y) {
delete dragStartPosition;
});
Da JointJS kein Ereignis "Papierzeigerbewegung" darstellt, müssen wir das Dokumentereignis mousemove
verwenden. Zum Beispiel mit JQuery:
$("#diagram")
.mousemove(function(event) {
if (dragStartPosition)
paper.translate(
event.offsetX - dragStartPosition.x,
event.offsetY - dragStartPosition.y);
});
Wir bekommen die Drag-Koordinaten und die aktuelle Zeigerposition starten und die Papierposition aktualisieren, um den paper.translate()
Anruf mit.
WARNUNG:, wenn Sie das Papier (mit paper.scale()
) skalieren, müssen Sie auch die Startposition des Schlepp skalieren:
var scale = V(paper.viewport).scale();
dragStartPosition = { x: x * scale.sx, y: y * scale.sy};
Die Anrufe paper.translate()
wird dann in die richtige Position aktualisieren.
Das funktioniert wunderbar! Danke vielmals! – Maria
Das ist pures Genie. Ich habe nicht verstanden, wie ich es machen soll. Vielen Dank. JointJS ist einfach genial. – Karl