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

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

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

进入体验效果
进入github
市场上做流程图的插件比较多,这里介绍一种基于canvas编写的js插件,结合vue框架做出精美的流程图
首先搭建vue框架,这里就不做介绍,由于jtopo官方demo里用到了jquery,所以我的项目里也引用了jquery插件,鉴于这里用到了很多的dom操作,所以建议大家也直接引用jquery进行操作;
然后将jtopo.js下载到本地,放到自己的vue项目的静态文件目录下,如下图:
vue引入jtopo.js
最终实现效果如下图
可拖拽流程节点

左侧图标采用的是阿里巴巴的iconfont字体图标,需将字体文件下载到本地,具体用法参考https://www.iconfont.cn/help/detail?spm=a313x.7781069.1998910419.17&helptype=code
这里demo使用数据结构为

// node-template.mock.js
export default [{id: '0',text: '鼠',type: 1,img: `rat.png`,icon: ''
}, {id: '1',text: '牛',type: 2,img: `cow.png`,icon: ''
}, {id: '2',text: '虎',type: 3,img: `tiger.png`,icon: ''
}, {id: '3',text: '兔',type: 4,img: `rabbit.png`,icon: ''
}, {id: '4',text: '龙',type: 5,img: `dragon.png`,icon: ''
}, {id: '5',text: '蛇',type: 6,img: `snake.png`,icon: ''
}, {id: '6',text: '马',type: 7,img: `horse.png`,icon: ''
}, {id: '7',text: '羊',type: 8,img: `sheep.png`,icon: ''
}, {id: '8',text: '猴',type: 9,img: `monkey.png`,icon: ''
}, {id: '9',text: '鸡',type: 10,img: `chicken.png`,icon: ''
}, {id: '10',text: '狗',type: 11,img: `dog.png`,icon: ''
}, {id: '11',text: '猪',type: 12,img: `pig.png`,icon: ''
}]

引用及dom渲染

// ListInfo.vue
import NodesTemplate from '../mock/node-template.mock'<div class="node-template"><ul><template v-for="node in nodesTemplate"><li :key="node.id" :id="node.id"><i class="iconfont option-font" v-html="node.icon"></i><span>{{node.text}}</span></li></template></ul></div>

点击图标事件

      $('.node-template').on('mousedown', 'li', function (event) { // 左侧图标列表点击时let index = $(this).attr('id')let imgUrl = `./static/lib/img/node/edit/${NodesTemplate[index].img}`window.vm.newNode = {nodeType: NodesTemplate[index].type,nodeName: vm.generateUniqNodeName(NodesTemplate[index].type)}let img = $('<img id="testImg" src="' + imgUrl + '" alt=""  style="display: none; width: 52px;height: 52px; opacity: 0.5"/>')$('body').append(img)let pageX = event.pageXlet pageY = event.pageY$('#testImg').css({position: 'absolute',left: pageX - 20 + 'px',top: pageY - 20 + 'px'}).show()})// 拖拽图标松开鼠标时判断落点范围是否在画布内$(document).on('mouseup', function (event) {event.preventDefault()let img = $('#testImg')if (img.length === 1) {let canvasBox = $('.canvas-box')let maxX = window.vm.canvasOffset.x + canvasBox.width()let minX = window.vm.canvasOffset.xlet maxY = window.vm.canvasOffset.y + canvasBox.height()let minY = window.vm.canvasOffset.ylet pageX = event.pageXlet pageY = event.pageYif (pageX > minX && pageX < maxX && pageY > minY && pageY < maxY) {let canvasX = pageX - window.vm.canvasOffset.x - window.vm.scene.translateXlet canvasY = pageY - window.vm.canvasOffset.y - window.vm.scene.translateYwindow.vm.newNode['nodeX'] = canvasXwindow.vm.newNode['nodeY'] = canvasYwindow.vm.newNode['versionId'] = window.vm.version.versionIdwindow.vm.newNode['nodeOrder'] = ++window.vm.nodeMaxOrderwindow.vm.newNode['nodeCode'] = 'ND_' + window.vm.nodeMaxOrderwindow.vm.drawNode(window.vm.newNode)}img.remove()}})// 左侧图标拖拽事件$(document).on('mousemove', function (event) {event.preventDefault()let img = $('#testImg')if (img.length === 1) {let pageX = event.pageXlet pageY = event.pageYimg.css({position: 'absolute',left: pageX - 20 + 'px',top: pageY - 20 + 'px'})}})

节点右键编辑
节点右键编辑
点击线操作
点击线删除
代码在不断完善中,有不错的建议和意见欢迎提出!


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

相关文章

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…

Argparse 教程

官方文档 argparse --- 命令行选项、参数和子命令解析器 — Python 3.10.2 文档 别人的笔记Argparse 教程 — Python 3.10.2 文档https://docs.python.org/zh-cn/3/howto/argparse.html#id1完整的argparse的API argparse --- 命令行选项、参数和子命令解析器 — Python 3.8…