使用d3画出很好看的力图,可以展示那种Neo4j知识图谱的效果。但是当一满屏都是小圆圈时又有点丧失了即看即懂的效果。因此需要实现对节点的收放。
主要是对生成力图的数据点集进行操作。
其中在收回某个节点的子节点时就是把数据点集中的相关节点删除,然后更新显示。需要注意的是,在删除点集时还有对点集进行循环查找,这个时候应该采用slice方法把原始点集深度拷贝一份,在这个点集里进行查找,然后删除原点集中的数据,否则会产生循环查找删除不完整的情况。(由于js的深度拷贝的原因,在删除显示点集时还需要拷贝源点集,否则可能把源点集给删掉了,没法恢复。)
在展开节点时,需要从源数据点集中循环查找某个待扩展点集的相关节点和关系,并将其加入到显示数据点集中,然后进行显示更新操作。