Это может быть достигнуто с помощью комбинации событий JointJS и документировать события.Дисплей графика заключен в div
:
<div id='diagram'></div>
Затем добавить обработчик событий для JointJS, сначала pointerdown
события, где мы храним начальную позицию перетаскивания:
paper.on('blank:pointerdown',
function(event, x, y) {
dragStartPosition = { x: x, y: y};
}
);
Тогда к концу перетаскивание (pointerup), когда мы удалим переменные мы сохраняем позицию в (он также действует как флаг, есть ли активное сопротивление в процессе):
paper.on('cell:pointerup blank:pointerup', function(cellView, x, y) {
delete dragStartPosition;
});
Поскольку JointJS не выставляет событие «перемещение указателя на бумагу», нам необходимо использовать событие документа mousemove
. Например, с JQuery:
$("#diagram")
.mousemove(function(event) {
if (dragStartPosition)
paper.translate(
event.offsetX - dragStartPosition.x,
event.offsetY - dragStartPosition.y);
});
Мы получаем сопротивление начальных координат и текущее положение указателя и обновить позицию бумаги с помощью paper.translate()
вызова.
ВНИМАНИЕ: если масштабировать бумагу (используя paper.scale()
), вы должны также масштабировать начальную позицию перетаскивания:
var scale = V(paper.viewport).scale();
dragStartPosition = { x: x * scale.sx, y: y * scale.sy};
Вызовы paper.translate()
будет обновлять в нужное положение.
Это работает замечательно! Большое спасибо! – Maria
Это чистый гений. Я не мог понять, как это сделать. Спасибо. JointJS просто блестяще. – Karl