JTopo添加动态连线

article/2025/8/15 4:41:55

效果如下
在这里插入图片描述

  1. 先在 JTopo 的 link 原型上定义一个方法
	window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame
JTopo.Link.prototype.drawanimepic = function (imgurl, scene, width, height) {var imgnode = new JTopo.Node()imgnode.setSize(width || 16, height || 16)imgnode.setImage(imgurl)imgnode.zIndex = 2.5var thislink = thisthis.isremove = falsefunction b (a, b) {var c = []if (a == null || b == null) return cif (a && b && a.outLinks && b.inLinks) {for (var d = 0; d < a.outLinks.length; d++) {for (var e = a.outLinks[d], f = 0; f < b.inLinks.length; f++) {var g = b.inLinks[f]e === g && c.push(g)}}}return c}function c (a, c) {var d = b(a, c)var e = b(c, a)var f = d.concat(e)return f}function d (a) {var b = c(a.nodeA, a.nodeZ)return b = b.filter(function (b) {return a !== b})}thislink.removeHandler = function () {this.isremove = truevar a = thisthis.nodeA && this.nodeA.outLinks && (this.nodeA.outLinks = this.nodeA.outLinks.filter(function (b) {return b !== a})),this.nodeZ && this.nodeZ.inLinks && (this.nodeZ.inLinks = this.nodeZ.inLinks.filter(function (b) {return b !== a}))var b = d(this)b.forEach(function (a, b) {a.nodeIndex = b})}function imgnodeanime () {if (!thislink.isremove) {if (thislink.nodeA.outLinks) {var xs = thislink.nodeA.cx - thislink.nodeZ.cxvar xy = thislink.nodeA.cy - thislink.nodeZ.cyvar l = Math.floor(Math.sqrt(xs * xs + xy * xy))var j = lxl = xs / l, yl = xy / lvar animespeed = (new Date() / 33)var colorpoint = parseInt(animespeed % l)imgnode.rotate = (Math.atan(xy / xs)) + (xs > 0 ? Math.PI : 0)imgnode.cx = thislink.nodeA.cx - colorpoint * xlimgnode.cy = thislink.nodeA.cy - colorpoint * ylwindow.requestAnimationFrame(imgnodeanime)}} else {scene.remove(imgnode)}}window.requestAnimationFrame(imgnodeanime)scene.add(imgnode)return imgnode
}
  1. 在添加连线的地方调用这个方法
let link// console.log(self.beginNode, endNode)if (self.lineType === 'line') {link = new JTopo.Link(self.beginNode, endNode)link.lineType = 'line'} else if (self.lineType === 'foldLine') {link = new JTopo.FoldLink(self.beginNode, endNode)link.direction = self.config.linkDirectionlink.bundleOffset = self.config.linkOffsetGap // 折线拐角处的长度link.lineType = 'foldLine'} else if (self.lineType === 'flexLine') {link = new JTopo.FlexionalLink(self.beginNode, endNode)link.direction = self.config.linkDirectionlink.lineType = 'flexLine'link.offsetGap = self.config.linkOffsetGap} else if (self.lineType === 'curveLine') {link = new JTopo.CurveLink(self.beginNode, endNode)link.lineType = 'curveLine'}if (!link) {return}// 保存线条所连接的两个节点IDlink.nodeSrc = self.beginNode.nodeIdlink.nodeDst = endNode.nodeIdif (self.lineType !== 'curveLine') {link.arrowsRadius = self.config.arrowsRadius}// 核心代码 这样 line 上面会创建一个节点, link.drawanimepic(topoImgPath + 'arrowLine.png', self.scene)// link.strokeColor = '255,0,255'// 线条颜self.scene.add(link)self.beginNode = nullthis.remove(self.link)self.link = null
  1. 保存数据(saveTopology)的时候,把这个创建出来的节点数据过滤掉
	let childs = editor.stage.childs[0].childs.filter(item => {return (item.elementType === 'node' && item.nodeId) || item.elementType === 'link'})editor.stage.childs[0].childs = childs

4.初始化时(init),添加连线节点动画

	// 添加动画效果let childs = [...editor.stage.childs[0].childs]this.stage.childs[0].childs.length = 0const node = childs.filter(item => {return (item.elementType === 'node' && item.nodeId) || item.elementType === 'link'})childs.length = 0childs = [...node]childs.forEach(item => {this.scene.add(item)})node.forEach(item => {if (item.elementType === 'link') {item.drawanimepic(topoImgPath + 'arrowLine.png', this.scene)// item.strokeColor = '255,0,255'// 圆边}})this.stage.childs[0].childs = this.scene.childs

这样就完成了一整个过程拉, 动画连线是csdn的小伙伴分享的,感谢


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

相关文章

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 …

超详细教程:windows安装MSYS2(mingw gcc)——更新于2021.11

目录 安装 MSYS2官网&#xff1a;https://www.msys2.org/ 安装 下载安装程序&#xff08;官网首页有&#xff09;&#xff1a;msys2-x86_64-20210725.exe 或 CSDN&#xff1a;https://download.csdn.net/download/ymzhu385/45988277运行安装程序。MSYS2 需要 64 位 Windows 7…