Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent dragging in Joint JS

Tags:

css

jointjs

I am working on JointJS API. However I want to prevent the elements from being movable from their original positions. Can you suggest me some feature of JointJS or any feature of CSS in general, which I could use to make my object immovable.

I can't use interactive: false option on the paper or paper.$el.css('pointer-events', 'none'); because I need to have highlighting features when mouse hovers over the element.

Please suggest a way that disables movement of elements while allowing other features. The relevant CSS code snippet is as follows:

.viewport {
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
}
.element {
    /* Give the user a hint that he can drag&drop the element. */
    cursor: crosshair;
    position: fixed;
}
.element * {
    /* The default behavior when scaling an element is not to scale the stroke in order to prevent the ugly effect of stroke with different proportions. */
    vector-effect: non-scaling-stroke;
    -moz-user-select: none;
    user-drag: none;
    position: fixed;
}
like image 838
Lahore Avatar asked Nov 11 '22 07:11

Lahore


1 Answers

The interactive option also allows a function value. To only allow interaction with links (more specificly joint.dia.LinkView instances), you could do this:

var paper = new joint.dia.Paper({
  el: $('#paper'),
  width: 400,
  height: 400,
  model: graph,
  interactive: function(cellView, method) {
    return cellView instanceof joint.dia.LinkView; // Only allow interaction with joint.dia.LinkView instances.
  }
});

Alternatively, you could check the method argument. The method value is pointermove when trying to drag an element, and pointerdown when clicking a link.

I hope this helps!

like image 67
Robert Klein Kromhof Avatar answered Nov 15 '22 04:11

Robert Klein Kromhof