我想锁定节点相对于其父复合节点的位置,这样如果我抓住并拖动父节点,子节点随之移动,但子节点不能单独获取。如果我将孩子设置为不可攻击和/或锁定,那么它不会与其父项一起移动,但如果我不这样做,则可以单独拖动它,这是我不想要的。可以这样做吗?
如果失败了,有没有办法以编程方式抓取/取消某个节点,以便我可以侦听抓取事件然后再抓取父节点?
答案 0 :(得分:1)
一般来说,带孩子的复合抓取/锁定逻辑可能需要改进,但是你应该能够用当前版本达到你想要的效果:
cy.nodes().nonorphans()
.on('grab', function(){ this.ungrabify(); })
.on('free', function(){ this.grabify(); })
;
这使得所有nonorphan / child节点不能直接获取,但仍可与父母一起移动。
答案 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
});
}