一、基本概念
1、mxGraph是一款Javascript图形框架,基于Graph开发。mxGraph提供了基于浏览器的图形编辑和可视化方案,可以运行在任何主流浏览器上。
2、mxGraph提供了大量的组件和示例,可以帮助开发者构建业务流、绘图引擎等图形应用。开发者可以使用mxGraph提供的API,轻松创建基于mxGraph的图形应用。
3、mxGraph支持多种布局算法,如树形结构、网格和分层等,可以自动对节点进行排列。
二、快速开始
1、准备工作
引入mxGraph的JavaScript文件:
<script src="https://cdn.jsdelivr.net/npm/mxgraph@4.0.0/javascript/mxClient.js"></script>
2、创建图形容器
使用JavaScript创建一个包含mxGraph的div,并指定样式和大小:
<style> .graphContainer { border: 1px solid gray; width: 500px; height: 400px; } </style> <div class="graphContainer" id="graphContainer"></div>
3、创建图形实例
使用mxGraph构造函数创建一个实例,并将其绑定到我们所创建的div上:
var container = document.getElementById('graphContainer'); var graph = new mxGraph(container);
4、创建节点
使用mxCell、mxGeometry和mxGraphModel创建一个节点,并将其添加到图形中:
var parent = graph.getDefaultParent(); graph.getModel().beginUpdate(); try { var v1 = graph.insertVertex(parent, null, 'Hello,', 20, 20, 80, 30); var v2 = graph.insertVertex(parent, null, 'World!', 200, 150, 80, 30); var e1 = graph.insertEdge(parent, null, '', v1, v2); } finally { graph.getModel().endUpdate(); }
三、图形组件
1、节点(Vertex)
使用mxGraph.insertVertex()方法创建一个节点,并可以指定其位置、大小、样式、标签等属性。
var vertex = graph.insertVertex(parent, null, 'Node', 20, 20, 80, 30, 'shape=ellipse');
2、连线(Edge)
使用mxGraph.insertEdge()方法创建一个连线,并可以指定其起点、终点、样式、标签等属性。
var edge = graph.insertEdge(parent, null, 'Edge', v1, v2, 'strokeWidth=2;endArrow=classic;');
3、标签(Label)
可以在节点或连线上添加标签,使用mxGraph.insertVertex()方法创建带有label属性的节点:
var vertex = graph.insertVertex(parent, null, 'Node', 20, 20, 80, 30, 'label=Node Label');
或使用mxCell.setAttribute()方法在已有节点或连线上添加标签:
cell.setAttribute('label', 'New Label');
四、图形事件
mxGraph提供了丰富的事件机制,可以响应各种图形操作的事件,如节点选中、移动、缩放等。
1、事件注册
使用mxEvent.addListener()方法注册一个事件监听器,定义在该事件发生时所执行的函数。
mxEvent.addListener(graph, 'zoom', function(sender, evt) { alert('Graph zoomed: ' + graph.view.scale); });
2、事件类型
常用的事件类型有:
- mouseDown:鼠标按下事件
- mouseMove:鼠标移动事件
- mouseUp:鼠标释放事件
- mouseWheel:鼠标滚轮事件
- dblClick:双击事件
- click:单击事件
- connect:两个节点连接事件
- disconnect:两个节点断开连接事件
五、布局算法
mxGraph提供了多种布局算法,可以自动布局节点和连线,使其看起来更加美观。
1、树形布局
使用mxHierarchicalLayout算法实现,可以自动排列树形结构。
var layout = new mxHierarchicalLayout(graph); layout.execute(graph.getDefaultParent());
2、网格布局
使用mxGridLayout算法实现,将节点排列在规则的网格中。
var layout = new mxGridLayout(graph); layout.execute(graph.getDefaultParent());
3、分层布局
使用mxStackLayout算法实现,将节点按层级分组排列。
var layout = new mxStackLayout(graph, true); layout.execute(graph.getDefaultParent());
六、自定义样式
mxGraph提供了多种预定义的样式,如矩形、圆形、文本框等,也可以自定义样式,以满足不同场景的需求。
1、节点样式
在节点的style属性中设置自定义样式:
var vertexStyle = 'shape=cylinder;fillColor=#FF9900;gradientColor=#FFFFFF;' var vertex = graph.insertVertex(parent, null, 'Node', 20, 20, 80, 30, vertexStyle);
2、连线样式
在连线的style属性中设置自定义样式:
var edgeStyle = 'strokeColor=#6600FF;strokeWidth=2;endArrow=classic;'; var edge = graph.insertEdge(parent, null, 'Edge', v1, v2, edgeStyle);
七、样式表
mxGraph支持CSS样式表,可以将各种样式定义在样式表中,并在需要时引用。
1、定义样式表
在HTML文档中定义样式表:
<style id="mxStyle"> .mxVertex { shape: ellipse; fillColor: #FFFFFF; strokeColor: #000000; strokeWidth: 2; } .mxEdge { strokeColor: #FF0000; } </style>
2、引用样式表
在mxGraph实例化时,将mxStyle样式表绑定到样式对象中:
var container = document.getElementById('graphContainer'); var graph = new mxGraph(container); var style = new mxStylesheet(); style.parse(document.getElementById('mxStyle').textContent); graph.setStylesheet(style);
八、总结
mxGraph是一款强大的JavaScript图形框架,提供了丰富的组件、事件、布局算法和样式表等功能,可以用于各种图形应用的开发。
通过学习本文所讲解的内容,您已经能够使用mxGraph快速创建一个简单的图形应用,并且可以进一步了解mxGraph的高级功能。