尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

maxGraph图表库实战:几分钟上手,从零构建可交互的流程图应用

maxGraph图表库实战:几分钟上手,从零构建可交互的流程图应用 maxGraph图表库实战几分钟上手从零构建可交互的流程图应用【免费下载链接】maxGraphmaxGraph is a fully client side JavaScript diagramming library项目地址: https://gitcode.com/gh_mirrors/ma/maxGraph还在为产品里要嵌入流程图编辑器、但找不到合适的库而纠结吗maxGraph 就是为你准备的答案。它是一款完全运行在浏览器端的 TypeScript 图表库专门用来构建流程图、网络拓扑图、组织结构图这类节点 连线的交互式应用。读完这篇文章你将掌握 maxGraph 的核心概念写出第一个能运行、能拖拽、能缩放的图表并避开新手最容易踩的坑。这个库到底能干什么简单说maxGraph 就是一张活的画布你能在上面放置顶点就是各种形状的节点比如矩形、椭圆用边就是连接线把它们串起来画完之后用户还能直接拖拽、缩放、编辑文字——体验和 draw.io 这类专业工具如出一辙。它源于已经停更的 mxGraph但用原生 TypeScript 重写零第三方依赖包体积更小还提供了精确的类型提示。最特别的是它把连接线、形状、插件都做成了可插拔的模块想用哪个注册哪个用不上的代码在打包时会被自动剔除。这就像一套乐高积木基础件齐全但你可以只挑自己需要的零件拼出最适合的应用。3步搭起你的第一个图表在动手前先理解一个概念图表模型。它就是图表的数据仓库专门管理顶点、边和分组这三样东西。写代码时你只需关心往模型里放什么至于怎么渲染到屏幕上maxGraph 全包了。下面这段代码创建一个 HTML 页面页面里显示一个矩形和一个橙色圆形中间用一条圆角连线串起来。先安装依赖再把代码贴进你的入口文件npm install maxgraph/coreimport maxgraph/core/css/common.css; import { Graph, InternalEvent } from maxgraph/core; // 需要一个 id 为 graph-container 的 DOM 容器 const container document.getElementById(graph-container)!; InternalEvent.disableContextMenu(container); // 屏蔽浏览器右键菜单 const graph new Graph(container); graph.setPanning(true); // 按住鼠标右键拖动画布 // batchUpdate 相当于批量操作一次事务内完成所有添加 graph.batchUpdate(() { // 添加一个矩形顶点position 是坐标size 是宽高 const rect graph.insertVertex({ position: [10, 10], size: [100, 100], value: 矩形节点, }); // 添加一个橙色圆形顶点通过 style 定制外观 const circle graph.insertVertex({ position: [350, 90], size: [50, 50], style: { fillColor: orange, shape: ellipse }, value: 圆形节点, }); // 用一条正交折线把两个顶点连起来 graph.insertEdge({ source: rect, target: circle, value: 连接线, style: { edgeStyle: orthogonalEdgeStyle, rounded: true }, }); });保存并刷新页面一个矩形连一个圆形的图表就渲染出来了而且可以直接拖拽移动节点。你还能通过graph.addListener(InternalEvent.CLICK, ...)监听点击事件给每个节点挂上交互逻辑。3个让开发效率翻倍的特性自动布局把摆位置交给算法。手动画流程图时最累的其实是排布坐标。maxGraph 内置了层级布局、树状布局、圆形布局等多种算法你只需把节点丢进图里调用一次布局函数节点就会自动排列得整整齐齐。就像用洗衣机的甩干模式衣服扔进去转几圈拿出来就是平整的。分组与折叠用文件夹管理复杂图表。顶点可以作为父节点容纳其他顶点和边形成子图。这很像电脑里的文件夹你可以把一整套相关节点收进一个组里一键折叠成一个小方块需要时再展开。画大型系统架构图时这个功能能把上千个节点的复杂度降一个量级。SVG 渲染与零依赖所见即所得部署零负担。maxGraph 基于 SVG 渲染画面在任何现代浏览器上都清晰锐利缩放不模糊并且它是纯前端库不需要任何服务端配合打包后丢到任何静态服务器上就能跑。新手最常踩的3个坑坑一用默认的Graph就以为万事大吉。Graph为了开箱即用会注册全部内置形状和插件包体积偏大。如果你做的是面向用户的线上产品建议改用BaseGraph——它不加载任何默认项你按需注册形状、连线样式和插件打包体积能小一大截。坑二增删节点时忘了包事务。每次修改模型都建议放进batchUpdate里。如果不这么做不仅渲染性能变差撤销/重做undo/redo的边界也会错乱导致用户按 CtrlZ 时行为诡异。记住一条铁律所有批量改动永远包在batchUpdate(() {...})里。坑三样式串到全局改不回来。getStylesheet().getDefaultVertexStyle()改的是全局默认样式会影响之后创建的所有顶点。如果你只想改某一个节点应该在insertVertex的style参数里单独指定或者通过putCellStyle定义可复用的命名样式。实战用maxGraph做一个审批流看板最后来点真格的实现一个订单审批流程看板涵盖下单→库存检查→发货→延迟通知的流转。关键代码只有三部分创建流程泳道、插入流程节点、接入一个点击节点高亮的交互。const graph new Graph(container); graph.setPanning(true); graph.batchUpdate(() { // 1. 创建两个泳道作为分组容器节点放进对应泳道 const service graph.insertVertex({ position: [20, 20], size: [560, 180], value: 客服组, style: { shape: swimlane }, }); const warehouse graph.insertVertex({ position: [20, 220], size: [560, 180], value: 仓库组, style: { shape: swimlane }, }); // 2. 在泳道内添加流程节点 const enterOrder graph.insertVertex({ parent: service, position: [40, 60], size: [120, 50], value: 录入订单, }); const receiveOrder graph.insertVertex({ parent: warehouse, position: [40, 60], size: [120, 50], value: 接收订单, }); const checkStock graph.insertVertex({ parent: warehouse, position: [200, 60], size: [120, 50], value: 库存检查, }); const ship graph.insertVertex({ parent: warehouse, position: [360, 60], size: [120, 50], value: 安排发货, }); // 3. 用连线把流程串起来 graph.insertEdge({ source: enterOrder, target: receiveOrder, value: }); graph.insertEdge({ source: receiveOrder, target: checkStock, value: }); graph.insertEdge({ source: checkStock, target: ship, value: 有货 }); }); // 点击节点时在控制台输出它的文本内容 graph.addListener(InternalEvent.CLICK, (_sender, evt) { const cell evt.getProperty(cell); if (cell) console.log(你点击了:, cell.getValue()); });注意看insertVertex里的parent参数就是上面提到的分组能力泳道就是这么装出来的。跑起来之后你就能得到一个可以拖拽、点击反馈的迷你审批流系统。到这里你已经从听说过走到了能上手。maxGraph 的能力边界远不止这些——序列化到 XML、自定义形状、打印导出官方文档都有配套示例和源码可参考。去把容器div换成你的业务场景画一张属于你自己的图吧。你离做出专业级图表应用只差一次npm install的距离。✨【免费下载链接】maxGraphmaxGraph is a fully client side JavaScript diagramming library项目地址: https://gitcode.com/gh_mirrors/ma/maxGraph创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表