通过JTopo.js在网页绘制网络拓扑图

article/2025/8/15 4:34:19

项目中遇到要在网页中绘制网络拓扑图的需求,要求节点具备点击、拖拽、缩放等交互功能,并且可以显示/隐藏详细信息,数据是设备实时上报来的。

综上,用画拓扑图的工具画一张固定的图片偷懒显然是不行的,最好是找到一个封装好的js库可以直接使用。

JTopo 是一款完全基于HTML5 Canvas的数据关系+交互式图形库。 可以快速创建一些拓扑关系图。项目的完整效果不能展示,自学过程中完成的demo的效果图如下,我将在下面介绍该js库的入门使用和一些功能的实现方法。

说明

1.该文章只相当于一个学习笔记,记录了我在项目中使用到的功能和知识点,并没有覆盖JTopo的所有内容,比如自动布局。分享出来希望能帮助有类似需求的人快速完成任务。有兴趣可以自己去官网进行深入学习。

2.官网提供了大量demo,并且支持在线修改和运行,非常方便。唯一缺点就是有些注释不够详细,需要不停的试来确定某些方法和参数的意义。我的demo也是参照官网上的demo,自己练习时写的,不保证性能。

一、工具的选择 

1.经过在网上搜索,首先找到了一个叫Qunee的,感觉非常合适,然而这个库是收费的,以个人开发者申请还需要签非盈利的协议,只能放弃。有兴趣的可以自己区官网看一看www.qunee.com

2.然后又找到一个叫D3(Data-Driven Documents)的,是一款很好的做数据可视化的js库,而且免费。唯一小缺憾是自由度很高,所以相对于一些开箱即用、API很简单的库来说自学难度稍微高一些。准备有时间了自学一下。官网是D3.js - Data-Driven Documents。

3.最后在单位旧项目的代码中找到了实现类似功能的js库,叫JTopo,搜了一下是开源免费的,看了一下demo很好上手,果断选择该工具实现功能。

二、准备工作

Github链接: GitHub - wuln/jTopo: draw the network topology by javascript

      Github上有一个demo,包含html、js、css和图片,但是时间显示是5年前了,下载下来之后对照着官网最新的文档发现很多方法、关键字都不相同,参考价值不大。

官方网站 jtopo 一个好用的交互式HTML5图形库

离线JS文件下载地址 jtopo 更新下载

三、入门程序

使用时把js文件的地址换成自己的地址。

<!DOCTYPE html>
<html>
<head><script type="text/javascript" src="js/jquery.js"></script><script type="text/javascript" src="js/jtopo-1.0.4_trial-min.umd.js"></script>
</head>
<body><!-- 用于渲染显示的div --><div id="divId" style="height:600px; width:600px;"></div><script>// 频繁用到的对象名字先导入,减少打字数var Stage = jtopo.Stage;var Layer = jtopo.Layer;var Node = jtopo.Node;var Link = jtopo.Link;// 根据一个DIV的id创建顶层对象:Stage// 注:'divId' 需换成你页面实际的div的id或者dom对象var stage = new Stage('divId');// 一个Stage下面可以有多个'层',Layer// 多个Layer可以配合,比如有背景层,有动画层,有交互、展示层等var layer = new Layer();// 一般步骤,将Layer放入到‘场景’中stage.addChild(layer);// 创建一个节点:new Node('文本', x,y,宽度, 高度)';// 所有参数都是可选项,也可以稍后赋值var fromNode = new Node('From', 200, 200, 48, 48);// 设置图片fromNode.setImage('imgs/server_icon.png');// 创建另一个节点var toNode = new Node('To');// x,ytoNode.setXY(400, 200);// 大小toNode.resizeTo(48, 48);toNode.setImage('imgs/server_icon.png');// 连线 new Link('文本',开始节点,结束节点);var link = new Link('Link', fromNode, toNode);// 设置样式:粗细link.setStyles('lineWidth', 2);// 将节点和连线都加入到Layer中layer.addChild(fromNode);layer.addChild(toNode);layer.addChild(link);// 按画布居中stage.translateToCenter();// 最后一步:显示stage.show();</script>
</body>
</html>

入门程序的效果图如图所示,默认具有选中高亮效果并且节点可以拖拽。

 四、核心对象介绍

jtopo的核心对象之间存在层级结构。

1. 顶层对象(Stage)

最顶层的为Stage,管理一个或者多个Layer,可以对Layer进行管理:添加、移除。并且提供一些常规性的交互功能,比如:鼠标缩放、视图模式变换(普通、框选、拖拽、编辑、锁定)、按画布居中、导出图片等功能。

2. 层对象(Layer)

Layer 是一个抽象对象,默认是完全透明的,上层对象为Stage。一个Layer下面可以有多个Node、Link对象,Node、Link对象只有放入Layer后才可能被绘制出来。Layer的frames属性用来设置绘制帧率,即每秒的重绘次数。

Layer 可以被平移、缩放,用户可以通过鼠标在画布上的拖拽 和 鼠标滚轮完成,也可以通过API来修改Layer的x、y坐标和缩放系数scaleX和scaleY实现同等效果。

一个Layer对象对应一个Canvas,多个Layer常用于画面逻辑分层,比如有的层绘制速度较慢,有的层绘制速度较快,有的层作为背景层,有的作为动画层。

需要通过Stage对象的addChild方法放入Stage中。

3. 节点对象(Node)

用户操作的核心两个对象Node 、Link之一。

Node默认是一个矩形,有坐标(x,y) 和 宽高尺寸(width、heigh)。

可以指定一个文本字符串,默认显示在中矩形的下面。

外观可以通过setStyles方法设置,核心的外观属性有:边框颜色、填充颜色、字体颜色、字体(大小、加粗等CSS Font支持的都可以)、圆角。

需要通过Layer对象的addChild方法放入Layer中。

4.连线对象(Link)

用户操作的核心两个对象之一。

Link是连线,有起始点和结束点,一般用来表示关系、流向等。

可以指定一个文本字符串,默认显示在连线的中间。

外观同样通过setStyles方法设置,核心的外观属性有:颜色、线条粗细、字体颜色、字体(大小、加粗等CSS Font支持的都可以)。

和Node一样需要放入Layer中。

五、文本和定位

文字定位由三个核心属性控制:1. 位置 2. 文本对齐方式 3. 文本基线

1.位置

节点文本的位置默认为‘cb’

线在连接时用的表明位置的关键字也是这些,额外再加一个‘edge’。‘edge’表明线连在端点的边上,具体连接点由两个端点的相对位置决定。

2.文本对齐方式

3.文本基线

4.自定义偏移量

通过textOffsetX和textOffsetY属性自定义偏移量。

六、事件处理

和js的事件绑定、删除一样,这里不再介绍。

七、动画效果

1.位置计算

Node 或 Link对象有一个getPoint(t)方法, t取值范围:[0-1],可以获取对象上某一点的坐标。

对于Node的来说,一周就是0-1,对于Link来说从起点到终点就是0-1。

     

2.以移动动画效果为例

//创建一个小球沿着线移动
var ball = new jtopo.CircleNode(null, 0, 0, 10);
ball.setStyles({'fillStyle': 'red','lineWidth': 2
});
layer.addChild(ball);
//Animation.circle表示一个来回
//前两个参数分别表示起点和终点位置
//第三个参数表示从起点到终点的时间,单位是ms      
jtopo.Animation.circle(0, 1, 5000, function(t) {
var p = link3.getPoint(t); //随着时间推移不断获取线上的点ball.text = '' + t.toFixed(1);ball.translateCenterTo(p.x, p.y); //将获取的位置赋给小球,达到移动的效果
}).start().repeat(10); //start表示开始动画,repeat表示重复次数

上述代码中的注释详细说明了方法的使用和参数的意义

一开始展示的demo中还通过对Link对象添加动画实现了信息的流向效果和线的呼吸效果。完整代码已上传至网站资源,链接为通过JTopo.js在网页绘制网络拓扑图-Javascript文档类资源-CSDN下载


http://chatgpt.dhexx.cn/article/E8IVb8yX.shtml

相关文章

JTopo添加动态连线

效果如下 先在 JTopo 的 link 原型上定义一个方法 window.requestAnimationFrame window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame JTopo.Link.prototype.drawanimepic functi…

JTopo + Vue 实现自定义拖拽流程图

JTopo Vue 实现自定义拖拽流程图 进入体验效果 进入github 市场上做流程图的插件比较多&#xff0c;这里介绍一种基于canvas编写的js插件&#xff0c;结合vue框架做出精美的流程图 首先搭建vue框架&#xff0c;这里就不做介绍&#xff0c;由于jtopo官方demo里用到了jquery&am…

jtopo连线绘制脉冲动画效果

随着需求的日益精细化&#xff0c;人们越来越多的关注到了画面的美观&#xff0c;单纯的节点间连线已经不满足人们的审美观念了&#xff0c;那么能不能让节点间的连线动起来呢&#xff1f;答案是可以的&#xff0c;老规矩&#xff0c;先上图&#xff0c;再说怎么实现。 同样&am…

jTopo入门 简单实现拓扑图

最近项目中需要绘制拓扑图&#xff0c;于是研究了下绘制拓扑图的组件&#xff0c;jtopo是一款比较简单易上手的开发工具包&#xff0c;分享给大家。 jtopo特点 1、完全基于HTML5 Canvas开发&#xff0c;API平易近人、几乎简单到了极致。 2、不依赖任何其他库、执行仅需一个Ca…

jtopo 实现一键布局

最近很忙、也很懒&#xff0c;一堆烦心事&#xff0c;jtopo后面不准备再深究了&#xff0c;本身东西也不多&#xff0c;做出的新功能&#xff0c;新特效也都写到博客中来了&#xff0c;今天给大家分享最近研究的一个新技能——jtopo一键布局&#xff0c;写给大家、也写给自己。…

jtopo简单实例

原贴地址 http://cn-arthurs.iteye.com/blog/2009345 说明: jtopo是一个基于canvas的js拓扑图形组件.比canvasexpress容易多了. 可以方便地加点,加连线,加鼠标事件,拖曳. 号称跨浏览器,不过实际上不支持ie678,加上excanvas.js也没用,除非像canvasexpress那样使用chrome插件. …

Vue — jTopo

近期在Vue项目中使用jTopo来制作集群节点拓扑图&#xff0c;官网http://www.jtopo.com/ 使用vue-cli搭建的模块化开发项目&#xff0c;使用第三方库最好的方式就是通过npm install xxx安装&#xff0c;然后在项目 里import xxx来使用&#xff1b;但是在JTopo官网上并没有发现有…

【Vue引入JTopo及所遇到的问题】

Vue引入JTopo及所遇到的问题 前言一、方案选型二、使用步骤三、总结 前言 项目过程中总是会遇到稀奇古怪的需求&#xff0c;这不&#xff0c;咱老大又让我画一个系统拓扑图放在首页&#xff0c;要求部分数据需从后端获取&#xff0c;动态展示在页面上。对于一个后端人猿来说&a…

Vue+JTopo(一)

1.下载js jtopo 更新下载 (不知道为什么网站被封禁了……在这提供下我现在用的 jtopo-1.4.4_trial-esm-min.js) 链接&#xff1a;https://pan.baidu.com/s/18V1HKwAuxzWM19RD4axGOg 提取码&#xff1a;0304 2.引用 文件放在public/js文件夹下&#xff0c;在index.hml内引用。…

jTopo(一)

jTopo(一) 一、jTopo是什么 jTopo&#xff08;Javascript Topology library)是一款完全基于HTML5 Canvas的关系、拓扑图形化界面开发工具包。 jTopo关注于数据的图形展示&#xff0c;它是面向开发人员的&#xff0c;需要进行二次开发。 使用jTopo很简单&#xff0c;可以快速…

windows10下安装MSYS2+MinGW64

1.下载msys2&#xff0c;官方地址&#xff1a;http://www.msys2.org/&#xff0c;这里选择64位的安装器 2.安装完成之后&#xff0c;先别启动msys2&#xff0c;在 安装根目录/etc/pacman.d/ 下找到mirrorlist.mingw32、mirrorlist.mingw64和mirrorlist.msys并进行修改。 mirr…

Win10 下安装 MSYS2

什么是 MSYS2 MSYS2 &#xff08;Minimal SYStem 2&#xff09; 是一个MSYS的独立改写版本&#xff0c;主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff08;POSIX 兼容性层&#xff09; 和 MinGW-w64&#xff08;从"MinGW-生成"&#xff09;基础上…

【msys2】使用msys2下载工具的旧版本

背景 苯人在计组实验中使用了msys2来安装verilator工具&#xff0c;结果最新版本的verilator有bug&#xff0c;几经探索找到了利用msys2下载旧版本工具的方法&#xff08;还可以将现有工具更新为旧版本&#xff09; 步骤 现以安装旧版本的verilator为例讲解方法。 这是msys…

【Window环境下使用MSYS2搭建CMake + MinGW环境】

目录标题 安装CMakecmake 测试 MSYS2下载MSYS2安装MSYS2修改软件下载源 MSYS2下安装MinGW配置MinGW配置到环境变量 hello world测试 安装CMake Cmake下载地址:https://cmake.org/download/,下一个windows压缩包就好了&#xff0c;因为我比较喜欢自己来配置&#xff0c;免得不知…

用MSYS2安装mingw

文章目录 前言卸载mingw安装MSYS2 前言 安装MSYS2的原因是&#xff0c;在windows安装protobuf时&#xff0c;想用mingw编译protobuf的库&#xff0c;而protobuf的官方手册只给出一句&#xff1a; To build from source using Cygwin or MinGW, follow the Unix installation i…

【VSCode】【msys2】VS Code + msys2配置Windows下C/C++开发环境

【VSCode】【msys2】VS Code msys2配置Windows下C/C开发环境 一、Msys2配置 1. 下载msys2, 网址&#xff1a;https://www.msys2.org/ 2. 安装msys2-x86_64-xxxx.exe 这里没什难度&#xff0c;记住安装路径就好&#xff0c;一路next就装好了。 3. 安装gcc 3.1. 更新msys2…

Msys2记录

MSYS2 ​ MSYS2是MSYS的升级版&#xff0c;集成了pacman和Mingw-w64的Cygwin升级版&#xff0c;提供了Mingw-w64的GNU工具&#xff0c;包括GCC&#xff0c;同时移植了Arch Linux的软件包管理系统pacman&#xff0c;具备了Cygwin的POSIX API&#xff0c;理论上在Linux上的程序使…

msys2在windows10系统的安装

测试系统: windows 10 首先需要msys2的安装包,可以去官网下载安装包 官网地址: http://www.msys2.org/ 本次下载的是 msys2-x86_64-20180531.exe 注意:1.msys2不可以安装在FAT*分区    2.msys2不能安装在win XP系统上 1.双击msys2-x86_64-20180531.exe,并点击下一步选择安…

MSYS2使用教程——win10系统64位安装msys2最新版(msys2-x86_xxxx.exe)

一、安装 测试系统: windows 10 首先需要msys2的安装包,可以去官网下载安装包 官网地址: http://www.msys2.org/ 本次下载的是 msys2-x86_64-latest.exe 注意: 1. msys2不可以安装在FAT*分区 2. msys2不能安装在win XP系统上 指定好安装路径&#xff08;一般D根目录即可&#…

初步使用MSYS2

在此镜像站点下载&#xff0c; https://mirror.tuna.tsinghua.edu.cn/help/msys2/ 根据资料&#xff0c; MSYS2 &#xff08;Minimal SYStem 2&#xff09; 是一个MSYS的独立改写版本&#xff0c;主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff08;POSIX …