mxgraph 搭建簡單應用 主線描述、屬性與方法的意思
使用前準備
mxBasePath變數用來定義庫資源的目錄。這個變數必須在載入庫前就定義好。
<script type="text/javascript">
mxBasePath = 'javascript/src/';
</script>
//mxClient.js包含該類庫的全部所需程式碼。
<script type="text/javascript" src="/js/mxClient.js"></script>
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
檢查瀏覽器是否支援
if (!mxClient.isBrowserSupported()) { //如果瀏覽器不支援,則顯示錯誤資訊 alert('該瀏覽器不支援'); }
Container容器
頁面用一個dom節點將graph與JavaScript結合。它可以使用document.getElementById在body中取得或者直接動態建立(如createElement)。
var container = document.getElementById('id-of-graph-container');
//建立Graph物件
var graph = new mxGraph(container);
- 1
- 2
- 3
- 1
- 2
- 3
部分基礎屬性
graph.setCellsResizable(false); //節點不可改變大小
mxGraphHandler.prototype.setMoveEnabled(true ); //是否可以移動
mxGraphHandler.prototype.guidesEnabled = true; //顯示細胞位置標尺
graph.setEnabled(false);//是否只讀
graph.setConnectable(false);//cell是否可以連線
graph.setCellsLocked(true);//是否可以移動連線,重新連線其他cell,主要用來展現中用
graph.setConnectable(true); // 是否允許Cells通過其中部的連線點新建連線,false則通過連線線連線
/*禁用節點雙擊,防止改變資料 */
graph.dblClick = function (evt, cell) {
var model = graph.getModel();
if (model.isVertex(cell)) {
return false;
}
};
// 節點是否解析html
graph.setHtmlLabels(true);
// 連線的樣式
var style = graph.getStylesheet().getDefaultEdgeStyle();
style[mxConstants.STYLE_ROUNDED] = true;//圓角連線
style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector; //自己拐彎的連線
部分方法
getCellAt(x,y,parent,vertices,edges)
//單擊事件
graph.click = function (me) {
var x = me.graphX;
var y = me.graphY;
var graph = this.GetmxGraph();
var model = graph.getModel();
var cell = graph.getCellAt(x, y);
if (model.isVertex(cell)) {
alert("環節ID:" + cell.id);
} else {
return false;
}
}
//新增雙擊事件
graph.addListener(mxEvent.DOUBLE_CLICK, function(sender, evt) {
var cell = evt.getProperty('cell');
mxUtils.alert('Doubleclick: '+((cell != null) ? 'Cell' : 'Graph'));
evt.consume();
});
//刪除選中Cell或者Edge
var keyHandler = new mxKeyHandler(graph);
keyHandler.bindKey(46, function (evt) {
if (graph.isEnabled()) {
graph.removeCells();
}
});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
新增節點和連線線
程式需要在beginUpdate和endUpdate中來插入節點和連線(更新圖形)。endUpdate應放在finally-block中以確保endUpdate一直執行。但beginUpdate不能在try-block中,這樣如果beginUpdate失敗那麼endupdate永遠不會執行。
beginUpdate和endUpdate方法不僅提供了顯示功能,而且它能夠當做undo/redo標記的邊界(也就是說,beginUpdate和endUpdate之間操作會作為undo、redo的原子操作,要麼同時被redo或undo, 相當於資料庫中的事務)。
var parent = graph.getDefaultParent();
graph.getModel().beginUpdate();
try {
//引數:節點顯示的內容、X、Y、寬度、高度,X、Y是相對於DOM節點中的位置
var v1 = graph.insertVertex(parent, null, '節點一', 20, 100, 300,145, 'rounded;strokeColor=none;fillColor=none;');
var v2 = graph.insertVertex(parent, null, '節點二', 20, 400, 300, 145, 'rounded;strokeColor=none;fillColor=none;');
//圓形節點
var v3 = graph.insertVertex(parent, null, 'B', 80, 100, 100, 100, 'shape=ellipse;perimeter=ellipsePerimeter');
//三角形節點
var v4 = graph.insertVertex(parent, null, 'C', 190, 30, 100, 60, 'shape=triangle;perimeter=trianglePerimeter;direction=south');
//節點是否可以摺疊
graph.getModel().setCollapsed(v2, 1);
var html = '<div>html</div>';
//更新節點顯示的內容
graph.getModel().setValue(v1, html);
//連線線,連線線上顯示的內容,連線的兩個節點,連線線的樣式
var e1 = graph.insertEdge(parent, null, '我1連2', v1, v2, "strokeWidth=3;labelBackgroundColor=white;fontStyle=1");
//直角連線
var e2 = graph.insertEdge(parent, null, '', v1, v2, 'edgeStyle=orthogonalEdgeStyle;');
//曲折連線
var e2 = graph.insertEdge(parent, null, '', v3, v2, 'edgeStyle=elbowEdgeStyle;elbow=horizontal;orthogonal=0;entryPerimeter=1;');
//虛線連線
graph.insertEdge(parent, null, null, step1, step2, 'crossover');
}
finally {
graph.getModel().endUpdate();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
style的使用,插入背景圖
var style = new Object();
style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_IMAGE;
style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
style[mxConstants.STYLE_IMAGE] = 'IMGUrl';
graph.getStylesheet().putCellStyle('image4gray', style);
//插入CELL中使用image4gray;即可
cell = graph.insertVertex(parent, null, name, x, y, cellWidth, cellHeight, 'image4gray;rounded=true;strokeColor=none;fillColor=yellow;');
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
獲取畫布中的所有元素
var mxGraph = this.GetmxGraph();
var parent = mxGraph.getDefaultParent();
var parentChildren = parent.children;
var arrEdge = []; //連線線
var arrVertex = []; //節點
//獲取所有資訊
for (var i = 0; i < parentChildren.length; i++) {
var child = parentChildren[i];
if (!child.isVisible()) {
continue;
}
//區分連線線、節點
if (child.isEdge()) {
var obj = new Object();
obj.ID = child.id;
obj.SourceID = child.source.id;
obj.TargetID = child.target.id;
arrEdge.push(obj)
} else if (child.isVertex()) {
var obj = new Object();
obj.ID = child.id;
obj.Name = child.value;
obj.LeftTopX = child.geometry.x;
obj.LeftTopY = child.geometry.y;
arrVertex.push(obj);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
相關推薦
mxgraph 搭建簡單應用 主線描述、屬性與方法的意思
使用前準備 mxBasePath變數用來定義庫資源的目錄。這個變數必須在載入庫前就定義好。 <script type="text/javascript"> mxBasePath = 'javascript/src/'; &
02 ndarray的屬性 、ndarray的基本操作(索引、切片、變形、連線、切分、副本)、聚合操作、矩陣操作、排序、Panda資料結構、Series建立、索引與切片、屬性與方法、運算
二、ndarray的屬性 4個必記引數: ndim:維度 shape:形狀(各維度的長度) size:總長度 dtype:元素型別 import matplotlib.pyplot as plt ndarr = plt.imread("./jin.png") plt.
分布式緩存技術redis學習系列(三)——redis高級應用(主從、事務與鎖、持久化)
master ica not ood www working can 出了 owin 上文《詳細講解redis數據結構(內存模型)以及常用命令》介紹了redis的數據類型以及常用命令,本文我們來學習下redis的一些高級特性。 回到頂部 安全性設置 設置客戶端操作秘密
事件對象的使用、屬性和方法
事件對象的使用、屬性和方法 事件對象的使用、屬性和方法1 event.target代表當前觸發事件的元素,可以通過當前元素對象的一系列屬性來判斷是不是我們想要的元素2 target屬性可以是註冊事件時的元素或者子元素,通常用於比較event.target和this來確定是不是由於冒泡而觸發的
【17】有關python面向對象編程的提高【多繼承、多態、類屬性、動態添加與限制添加屬性與方法、@property】
爸爸 mce turn object get 寫法 pri import sel 一、多繼承 案例1:小孩繼承自爸爸,媽媽。在程序入口模塊再創建實例調用執行 #father模塊 class Father(object): def __init__(self,mon
C#基礎、屬性和方法,結構和類(建構函式)
一、類 定義一個類時,等於定義了一個數據型別的藍圖。 類的定義: 類的定義是以關鍵字 class 開始,後跟類的名稱。 類的主體,包含在一對花括號內。 二、屬性 屬性是類,結構和介面的命名成員。 訪問器 屬性的訪問器包含有助於讀取或計算或設定
C#、屬性和方法,結構和類(建構函式)
一、類 定義一個類時,等於定義了一個數據型別的藍圖。 這實際上並沒有定義任何的資料,但它定義了類的名稱意味著什麼,也就是說,類的物件由什麼組成及在這個物件上可執行什麼操作。 物件是類的例項。構成類的方法和變數成為類的成員。 類的定義: 類的定義
《head first java》類、物件、屬性和方法的關係
類的定義:類是對某一類事物的描述,是抽象的、概念上的意義。 屬性表示類的特性,如 類——冰箱 屬性——價格、耗電量、體積 方法表示類的功能,類能做什麼,如 類——冰箱 方法——儲存、冷凍等 類需要通過class來宣告 class 類名稱{ 屬性 方法 } 函
技術融會 促進應用協同――10G、IPv6與MSMR
經歷了業務應用IP化、通訊應用IP化後,企業的系統龐大而複雜,單一系統之間耦合度低,缺乏內在的通訊,例如供應鏈系統和語音通訊系統各自獨立,MIS系統和即使通訊系統各自獨立。系統的相互獨立,內在關聯的缺失制約了對生產效率和生產力進一步的提升,也限制了對IT系統價值的深度挖掘。應用深化,通訊融合是IP化之
[js高手之路]原型對象(prototype)與原型鏈相關屬性與方法詳解
隱式 之前 username tar uname create pro getproto .get 一,instanceof: instanceof檢測左側的__proto__原型鏈上,是否存在右側的prototype原型. 我在之前的兩篇文章 [js高手之路]構造函數的基
類屬性與方法(待補充)
訪問 attr att 類定義 class bsp 使用 fuck ttr 類屬性與方法 類的私有屬性 __private_attrs 兩個下劃線開頭,申明該屬性為私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時self.__private_attrs
document的屬性與方法小結
片元 寫入 clas 等價 追加 import 接受 文檔 tle document節點是文檔的根節點,每張網頁都有自己的document節點。屬性:1:document.doctype----它是一個對象,包含了當前文檔類型 (Document Type Declarat
數組(Array)與 字符串(String)公用的屬性與方法
con 提取 方法 ron 連接 ray str 通過 index 數組與字符串都有很多方法,有一些方法是公用的,在這裏就將數組與字符串公用的方法提取出來,方便大家的記憶 1. length 可通過str.length與arr.length分別取到字符串與數組的長度; 2.
h5新的屬性與方法
document.webkitCancelFullScreen() 收起全屏, 注意是document物件 Node.webkitRequestFullScreen() 開啟全屏顯示 這裡Node是video或者任意盒子 在判斷是否全屏或收起全屏 if(webk
python3__面向物件__類的內建屬性與方法
0.object類原始碼 class object: """ The most base type """ def __delattr__(self, *args, **kwargs): # real signature unknown """ Impleme
window---屬性與方法
外部物件:BOM和DOM BOM:瀏覽器物件模型: 提供了訪問和操作瀏覽器各元件的方式。 將瀏覽器比喻成一個物件-window(
函式屬性與方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> &l
Vector向量的屬性與方法 u3d學習總結筆記本
1.Vector2(x,x)的簡寫。 2.Vector2各種屬性值 3.Vector2各種方法 //=================================== 1.Vector2(x,x)的簡寫。 print(Vector2.down);//編寫Vect
第三章 條件語句、迴圈與方法
一、概述 流程控制語句是用來控制程式中各語句執行順序的語句,可以把語句組合成能完成一定功能的小邏輯模組。其流程控制方式採用結構化程式設計中規定的三種基本流程結構,即:順序結構、分支結構和迴圈結構。 二、選擇結構 2.1條件語句if if分支結構分為三種:if、if e
jBox屬性與方法
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script src="https://cdn.jsdelivr.net/gh/StephanWagne