如何锁定 cytoscape.js 节点在其父节点内的位置

Suz*_*ley 5 cytoscape.js

我想锁定节点相对于其父复合节点的位置,这样,如果我抓取并拖动父节点,子节点会随之移动,但子节点不能单独抓取。如果我将子项设置为不可抓取和/或锁定,那么它不会与其父项一起移动,但如果我不这样做,它可以被单独拖动,这是我不想要的。这可以做到吗?

如果做不到这一点,有没有一种方法可以以编程方式抓取/取消抓取节点,以便我可以侦听抓取事件,然后抓取父节点?

max*_*anz 3

与子对象的复合抓取/锁定逻辑可能总体上需要改进,但您应该能够使用当前版本实现您今天想要的效果:

cy.nodes().nonorphans()
  .on('grab', function(){ this.ungrabify(); })
  .on('free', function(){ this.grabify(); })
;
Run Code Online (Sandbox Code Playgroud)

这使得所有非孤立/子节点不能直接抓取,但仍然可以与其父节点一起移动。

改进参考: https: //github.com/cytoscape/cytoscape.js/issues/1074