承接第一篇文章的展开和折叠节点,现在说说移动主节点,子节点需要同时跟随保持原来的位置一起移动。
demo案列
var subidsarr = newNodeArr[click_node_id].subids;
var position = nodes_data._data;
var positionNetwork = network.getPositions();
startNetNodeX = positionNetwork[click_node_id].x;
startNetNodeY = positionNetwork[click_node_id].y;
for(var i =0;i<subidsarr.length;i++){
startNodeX = position[subidsarr[i]].x;
startNodeY = position[subidsarr[i]].y;
numNetx = startNetNodeX - position[click_node_id].x;
numNety = startNetNodeY - position[click_node_id].y;
network.moveNode(subidsarr[i],startNodeX+numNetx,startNodeY+numNety);
}
demo说明
newNodeArr[click_node_id].subids:subids子节点的id数组,该说明请具体看展开和折叠篇
network.getPositions():获取所有的节点坐标,实时的节点位置
nodes_data._data:每次拖动结束后,节点当时的位置
思路
1. 每次拖动主节点,首先需要知道主节点下的所有子节点和子从节点
2. 拖动这节点,获取主节点的移动的x和y坐标,然后计算每一次x和y的移动距离,分别给每个子节点做计算
以上就是实现拖动节点控制子节点来进行移动的方式。这里有个问题,节点数比较多的话,或有卡顿现象,暂时还没想好怎么去更好的处理,如果这篇文章有幸被大神们看到,可以指点指点小弟,万分感谢。
网友评论