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

时间:2015-08-20 23:23:05

标签: cytoscape.js

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

如果失败了,有没有办法以编程方式抓取/取消某个节点,以便我可以侦听抓取事件然后再抓取父节点?

2 个答案:

答案 0 :(得分:1)

一般来说,带孩子的复合抓取/锁定逻辑可能需要改进,但是你应该能够用当前版本达到你想要的效果:

cy.nodes().nonorphans()
  .on('grab', function(){ this.ungrabify(); })
  .on('free', function(){ this.grabify(); })
;

这使得所有nonorphan / child节点不能直接获取,但仍可与父母一起移动。

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

答案 1 :(得分:0)

对于后代,将在cytoscape-automove

中执行此操作的代码
let nodeList = cy.nodes().nonorphans();
for (let i=0; i < nodeList.length; i++) {
        let n = nodeList[i];
        let parent = n.parent()[0];
        let family = parent.children();
        family.add(parent);

        this.cy.automove({
            nodesMatching: family,
            reposition: 'drag',
            dragWith: n
        });
    }