D3.js 力导向图来处理拓扑图

本文探讨如何在D3.js 4.0中利用力导向图布局创建拓扑图,以及解决固定节点和拖拽时保持链路长度不变的问题。通过分析D3.js的API,特别是fixed属性的使用,展示了如何在节点拖动时不影响其他节点的位置,并调整链路长度。
摘要由CSDN通过智能技术生成

记录一点碰到的问题和解决方案。感觉国内关于D3.js 4.0版本的相关资料还是少。

力导向图布局

D3一种布局的方式,可以将你nodes links的节点数据转换成可以绘制的坐标点数据,然后通过svg展现出来,画拓扑图中用到。

通过fixed属性来固定节点

https://bl.ocks.org/mbostock/...

上面作者的demo(d3.js v4)。
力导向图的几个特征

  • 节点之间的相互作用力的存在 所以节点不能重合,然后节点拖拽的过程中会影响到其他的节点

  • 拖拽的过程 节点之间的线段长度不变,会会弹回去

但是对于拓扑图来说,这两点会有问题,并不需要这样的体验,简单来说,节点固定后,拖拽不影响其他节点的位置,节点拖拽链路长度要变动。

找了个作者的demo
sticky force layout
这是D3.js v3版本的实现方法
主要方法就是将节点数据

d.fixed = true;

一开始没有仔细看v4版本的API 想当然以为也是这样去做的,尝试了好久没成功。
v4版本的api对fixed节点的规定是 如果节点数据(d) 有fx fy两个值不为null,那么就是固定节点,unfix固定节点的方法就是 设置fx fy=null。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值