直接拷贝可用,需要引入官方的x6.js(AntV X6)  antvx6-flow: antv x6实现流程画图 (gitee.com)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./js/x6.js"></script><style type="text/css">#container {width: 100%;height: 600px;display: flex;border: 1px solid #dfe3e8;}#stencil {width: 180px;height: 100%;position: relative;border-right: 1px solid #dfe3e8;}#graph-container {width: calc(100% - 180px);height: 100%;}.x6-widget-stencil  {background-color: #fff;}.x6-widget-stencil-title {background-color: #fff;}.x6-widget-stencil-group-title {background-color: #fff !important;}.x6-widget-transform {margin: -1px 0 0 -1px;padding: 0px;border: 1px solid #239edd;}.x6-widget-transform > div {border: 1px solid #239edd;}.x6-widget-transform > div:hover {background-color: #3dafe4;}.x6-widget-transform-active-handle {background-color: #3dafe4;}.x6-widget-transform-resize {border-radius: 0;}.x6-widget-selection-inner {border: 1px solid #239edd;}.x6-widget-selection-box {opacity: 0;}</style>
</head>
<body><div class="header"><button onclick="getJson()">点击</button></div><div id="container"><div id="stencil"></div><div id="graph-container"></div></div><script>// #region 初始化画布const graph = new X6.Graph({container: document.getElementById('graph-container'),grid: true,mousewheel: {enabled: true,zoomAtMousePosition: true,modifiers: 'ctrl',minScale: 0.5,maxScale: 3,},connecting: {router: {name: 'manhattan',args: {padding: 1,},},connector: {name: 'rounded',args: {radius: 8,},},anchor: 'center',connectionPoint: 'anchor',allowBlank: false,snap: {radius: 20,},createEdge() {return new X6.Shape.Edge({attrs: {line: {stroke: '#A2B1C3',strokeWidth: 2,targetMarker: {name: 'block',width: 12,height: 8,},},},zIndex: 0,})},validateConnection({ targetMagnet }) {return !!targetMagnet},},highlighting: {magnetAdsorbed: {name: 'stroke',args: {attrs: {fill: '#5F95FF',stroke: '#5F95FF',},},},},resizing: true,rotating: true,selecting: {enabled: true,rubberband: true,showNodeSelectionBox: true,},snapline: true,keyboard: true,clipboard: true,})// #endregion// #region 初始化 stencilconst stencil = new X6.Addon.Stencil({title: '流程图',target: graph,stencilGraphWidth: 200,stencilGraphHeight: 180,collapsable: true,groups: [{title: '基础流程图',name: 'group1',},{title: '系统设计图',name: 'group2',graphHeight: 250,layoutOptions: {rowHeight: 70,},},],layoutOptions: {columns: 2,columnWidth: 80,rowHeight: 55,},})document.getElementById('stencil').appendChild(stencil.container)// #endregion// #region 快捷键与事件// copy cut pastegraph.bindKey(['meta+c', 'ctrl+c'], () => {const cells = graph.getSelectedCells()if (cells.length) {graph.copy(cells)}return false})graph.bindKey(['meta+x', 'ctrl+x'], () => {const cells = graph.getSelectedCells()if (cells.length) {graph.cut(cells)}return false})graph.bindKey(['meta+v', 'ctrl+v'], () => {if (!graph.isClipboardEmpty()) {const cells = graph.paste({ offset: 32 })graph.cleanSelection()graph.select(cells)}return false})//undo redograph.bindKey(['meta+z', 'ctrl+z'], () => {if (graph.history.canUndo()) {graph.history.undo()}return false})graph.bindKey(['meta+shift+z', 'ctrl+shift+z'], () => {if (graph.history.canRedo()) {graph.history.redo()}return false})// select allgraph.bindKey(['meta+a', 'ctrl+a'], () => {const nodes = graph.getNodes()if (nodes) {graph.select(nodes)}})//deletegraph.bindKey('backspace', () => {const cells = graph.getSelectedCells()if (cells.length) {graph.removeCells(cells)}})// zoomgraph.bindKey(['ctrl+1', 'meta+1'], () => {const zoom = graph.zoom()if (zoom < 1.5) {graph.zoom(0.1)}})graph.bindKey(['ctrl+2', 'meta+2'], () => {const zoom = graph.zoom()if (zoom > 0.5) {graph.zoom(-0.1)}})// 控制连接桩显示/隐藏const showPorts = (ports, show) => {for (let i = 0, len = ports.length; i < len; i = i + 1) {ports[i].style.visibility = show ? 'visible' : 'hidden'}}graph.on('node:mouseenter', () => {const container = document.getElementById('graph-container')const ports = container.querySelectorAll('.x6-port-body',)showPorts(ports, true)})graph.on('node:mouseleave', () => {const container = document.getElementById('graph-container')const ports = container.querySelectorAll('.x6-port-body',)showPorts(ports, false)})// #endregion// #region 初始化图形const ports = {groups: {top: {position: 'top',attrs: {circle: {r: 4,magnet: true,stroke: '#5F95FF',strokeWidth: 1,fill: '#fff',style: {visibility: 'hidden',},},},},right: {position: 'right',attrs: {circle: {r: 4,magnet: true,stroke: '#5F95FF',strokeWidth: 1,fill: '#fff',style: {visibility: 'hidden',},},},},bottom: {position: 'bottom',attrs: {circle: {r: 4,magnet: true,stroke: '#5F95FF',strokeWidth: 1,fill: '#fff',style: {visibility: 'hidden',},},},},left: {position: 'left',attrs: {circle: {r: 4,magnet: true,stroke: '#5F95FF',strokeWidth: 1,fill: '#fff',style: {visibility: 'hidden',},},},},},items: [{group: 'top',},{group: 'right',},{group: 'bottom',},{group: 'left',},],}X6.Graph.registerNode('custom-rect',{inherit: 'rect',width: 66,height: 36,attrs: {body: {strokeWidth: 1,stroke: '#5F95FF',fill: '#EFF4FF',},text: {fontSize: 12,fill: '#262626',},},ports: { ...ports },},true,)X6.Graph.registerNode('custom-polygon',{inherit: 'polygon',width: 66,height: 36,attrs: {body: {strokeWidth: 1,stroke: '#5F95FF',fill: '#EFF4FF',},text: {fontSize: 12,fill: '#262626',},},ports: {...ports,items: [{group: 'top',},{group: 'bottom',},],},},true,)X6.Graph.registerNode('custom-circle',{inherit: 'circle',width: 45,height: 45,attrs: {body: {strokeWidth: 1,stroke: '#5F95FF',fill: '#EFF4FF',},text: {fontSize: 12,fill: '#262626',},},ports: { ...ports },},true,)X6.Graph.registerNode('custom-image',{inherit: 'rect',width: 52,height: 52,markup: [{tagName: 'rect',selector: 'body',},{tagName: 'image',},{tagName: 'text',selector: 'label',},],attrs: {body: {stroke: '#5F95FF',fill: '#5F95FF',},image: {width: 26,height: 26,refX: 13,refY: 16,},label: {refX: 3,refY: 2,textAnchor: 'left',textVerticalAnchor: 'top',fontSize: 12,fill: '#fff',},},ports: { ...ports },},true,)const r1 = graph.createNode({shape: 'custom-rect',label: '开始',attrs: {body: {rx: 20,ry: 26,},},})const r2 = graph.createNode({shape: 'custom-rect',label: '过程',})const r3 = graph.createNode({shape: 'custom-rect',attrs: {body: {rx: 6,ry: 6,},},label: '可选过程',})const r4 = graph.createNode({shape: 'custom-polygon',attrs: {body: {refPoints: '0,10 10,0 20,10 10,20',},},label: '决策',})const r5 = graph.createNode({shape: 'custom-polygon',attrs: {body: {refPoints: '10,0 40,0 30,20 0,20',},},label: '数据',})const r6 = graph.createNode({shape: 'custom-circle',label: '连接',})stencil.load([r1, r2, r3, r4, r5, r6], 'group1')const imageShapes = [{label: 'Client',image:'https://gw.alipayobjects.com/zos/bmw-prod/687b6cb9-4b97-42a6-96d0-34b3099133ac.svg',},{label: 'Http',image:'https://gw.alipayobjects.com/zos/bmw-prod/dc1ced06-417d-466f-927b-b4a4d3265791.svg',},{label: 'Api',image:'https://gw.alipayobjects.com/zos/bmw-prod/c55d7ae1-8d20-4585-bd8f-ca23653a4489.svg',},{label: 'Sql',image:'https://gw.alipayobjects.com/zos/bmw-prod/6eb71764-18ed-4149-b868-53ad1542c405.svg',},{label: 'Clound',image:'https://gw.alipayobjects.com/zos/bmw-prod/c36fe7cb-dc24-4854-aeb5-88d8dc36d52e.svg',},{label: 'Mq',image:'https://gw.alipayobjects.com/zos/bmw-prod/2010ac9f-40e7-49d4-8c4a-4fcf2f83033b.svg',},]const imageNodes = imageShapes.map((item) =>graph.createNode({shape: 'custom-image',label: item.label,attrs: {image: {'xlink:href': item.image,},},}),)stencil.load(imageNodes, 'group2')function getJson(){var json = graph.toJSON();console.log(json);}</script>
</body>
</html>

AntV X6流程图绘制程序(官方示例纯javascript+html+css)相关推荐

  1. AntV X6流程图绘制程序

    (官方示例纯javascript+html+css) 直接拷贝可用,需要引入官方的x6.js(AntV X6) antvx6-flow: antv x6实现流程画图 <!DOCTYPE html ...

  2. 微信小程序官方示例 Demo 源代码获取

    一.引言 最近在学习微信小程序,莫名其妙的刷到了腾讯官方出的 小程序示例 的 Demo,感觉做的真的很好. 要是自己在写小程序之前,多多参考这个 Demo 里面的一些东西,应该会轻松很多,而且做出来的 ...

  3. 微信小程序官方示例 Demo 代码

    以前只知道小程序有一个UI组件库, 不知道小程序还有一个官方示例Demo,今天用了一下大大的提高了我的编程速度,界面截图如下: 具体的你们自己打开吧,我给你们整好了拦截,微信小程序官方示例Demo代码 ...

  4. AntV X6 流程图

    安装 AntV X6  npm install @antv/x6 --save html结构 <div class="editor" ref="editor&quo ...

  5. 【VUE3+AntV X6】 引入ANTV X6 的流程图编辑器应用(一)

    ANTV X6 流程图编辑器应用 唠唠叨叨 事发背景 实现效果 实现思路 总结 参考资料 唠唠叨叨 唉!最近感觉非常忙,要学的东西太多,要实现的方法变幻莫测,层出不穷,越学越觉得自己不会的实在太多.项 ...

  6. 代替visio(流程图绘制软件)的免费软件

    作者:善用佳软 出处:http://xbeta.info/visio-alternative.htm 说到画流程图,很多人第一反应是MS visio.对于公司来讲,这确为较好的选择.但对个人偶尔应用. ...

  7. 【转】Visio(流程图绘制软件)的免费替代品

    转自http://xbeta.info/visio-alternative.htm xmind 相比其他软件,流程图[2]绘制工具的种类不算很多,最广为人知的应该是MS Visio.对实力雄厚的机构来 ...

  8. 支付宝小程序演示示例

    使用 使用支付宝扫码可以立即体验: 主要功能 小程序官方示例展示官方组件和API:

  9. Vue项目中使用AntV X6绘制流程图

    Vue项目中使用AntV X6绘制流程图 一.需求 在Vue2.x(Vue3.x项目同理)项目中使用AntV X6组件库绘制流程图,需要实现以下需求: 需求1:左侧菜单中的模块可以拖拽进入画布中生成对 ...

最新文章

  1. 动图演示:手撸堆栈的两种实现方法!
  2. 类与对象与结构体的区别
  3. 【实施工程师】Linux查看日志后100行
  4. 计组-总线操作和定时
  5. 转子碰磨 matlab,航空科普:什么是航空发动机转子碰磨?
  6. java hashcode 例子_Java UUID hashCode()用法及代码示例
  7. mysql desc show_mysql 查看信息的命令(show\desc\explain)
  8. linux redis-trib.rb,linux 关于redis-trib.rb构建redis集群
  9. java工程中使用freemarker例子
  10. 售价19000元!华为发布全新5G折叠屏手机Mate Xs
  11. 6种创新难以打动人心
  12. 从单体迈向Serverless的避坑指南
  13. OpenCV-图像处理(26、直方图反向投影(Back Projection))
  14. 如何快速推广你的博客
  15. 2010年中国互联网十大事件
  16. vite报错 process is not defined
  17. 东大22春领导科学与决策X《领导科学与决策》在线平时作业2题目非答案
  18. miui android 去除 导航栏 代码,09.11 PE-TL10 MIUI6 导航栏可自由隐藏 DPI 布局切换等 HRT_Kangvip...
  19. springboot项目结构_从零搭建Spring Boot脚手架(1):开篇以及技术选型
  20. 秋招经验总结(私企,外企,国企)

热门文章

  1. MySql 查询语句替换换行符
  2. 运用Jaccard Coefficient进行链路预测
  3. 非常实用的论文查找网站
  4. Python简介及入门
  5. win10+VS2012+opencv2.4.11的安装和配置
  6. vue中百度地图使用及自定义点聚合样式
  7. Material Design学习总结
  8. Android刷windows 10系统,无处不在!安卓手机能刷 Win10 系统了
  9. 测试工程师如何提高工作效率
  10. ChatGPT指令大全(中文版)