使用Visjs实现网络拓扑图
Vis 官网是http://visjs.org/
许可是Vis.js is dual licensed under both Apache 2.0 and MIT
最近需要做拓扑图,找了几个项目试用了一下。有几个要求如下:
-
能实现网络图
-
单击节点能够隐藏或显示下级节点
-
能够查找节点并聚焦到此节点
首先想到的是d3js,效果酷炫,但是之前没怎么用过,没找到特别合适的示例。没做特别深入的研究。后来看了百度echarts也有此类型的图,叫关系图。由于echart的api提供了setOption()方法,可以直接修改图表属性,看起来比较方便,但是set后图重绘了,每个点的位置变了,对我的第二个需求影响体验,单击节点后图就会刷下,下次这个节点位置就变了。最后发现了这个visjs,有个网络图(Network)满足我的需求。
vis官网:http://visjs.org/ ,
许可:Vis.js is dual licensed under both Apache 2.0 and MIT
有Network,Timeline,Graph2d,Graph3d几种类型,和DataSet数据结构。
1 //创建dom对象和echart类似 2 3 var container = document.getElementById('domId'); 4 5 //初始化节点和线条数据,从接口获取后赋值 6 7 var nodes = []; 8 9 var edges = []; 10 11 //然后用DataSet封装起来 12 13 var data = { 14 15 nodes : new DataSet(nodes), 16 17 edges : new DataSet(edges) 18 19 } 20 21 //创建network对象 22 23 var network = new vis.Network(container, data, options);//option参照文档
图表就生成了。需求1完成。官方例子:http://visjs.org/examples/network/basicUsage.html
Network支持常见的鼠标点击事件,单击、双击、右击。事件会返回选中的节点和线条(右键除外,需要用network.getNodeAt()获取)、点击坐标、事件对象。
通过单击事件得到当前node,然后再计算出需要控制显示隐藏的节点和线。最后通过DataSet提供的update更新图表,图表不会像echart那样改变节点的位置,非常好用。需求2完成。
需求3搜索,是利用network提供的focus(nodeId,option)方法直接聚焦到搜索节点,可以在option中设置animation参数。
注:关于echart不知道我有没有用错,有没有不刷新图表的方法,有知道的同学可以介绍下,谢谢!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具