jsPlumb.js(連線器)API閱讀筆記__js

來源:互聯網
上載者:User
jsPlumb.js(連線器)API閱讀筆記 jsPlumb DOCS

公司要開始做流程式控制制器,所以先調研下jsPlumb,下文是閱讀jsPlumb提供的document所產生的歸納總結 setup

如果不使用jQuery或者類jQuery庫,則傳入的節點得用id的形式,否則jsPlumb會為元素設定一個id。

jsPlumb.ready(function(){  ···});//orjsPlumb.bind("ready",function(){  ···});
最好確認jsPlumb載入完畢之後,再開始使用相關功能。

預設情況下,jsPlumb在瀏覽器的視窗中註冊,為整個頁面提供一個靜態執行個體,所以也可以把它看成一個類,來執行個體化jsPlumb:

var firstInstance = jsPlumb.getInstance();

如果在使用過程中,元素的id產生了新的變化(多是產生了新的節點,舊的節點被刪除了)。則可以: jsPlumb.setId(el,newId) jsPlumb.setIdChanged(oldId,newId)

在使用過程中,每個部分的z-index需要注意,否則連線可能會被覆蓋,jsPlumb會為每個節點設定端點,用於定位端點。

jsPlumb也提供了拖動方法:

var secondInstance = jsPlumb.getInstance();secondInstance.draggable("some element");

重繪,每次使用連線時,都會導致相關聯的元素重繪,但當載入大量資料時,可以使用:

jsPlumb.setSuspendDrawing(true);jsPlumb.setSuspendDrawing(false,true);

這裡第二個參數的true,會使整個jsPlumb立即重繪。
也可以使用batch:

jsPlumb.batch(fn,[doNotRepaintAfterwards]);

這個函數也是一樣,可以先將所有的串連全部註冊好,再一次重繪。
這個方法在1.7.3版本之前名稱為doWhileSuspended. config defaults

當然,jsPlumb會有一些預設的參數:
分為全域預設參數和連線預設參數,

Anchor : "BottomCenter",//端點的錨點的位置聲明(錨點):left,top,bottom等Anchors : [ null, null ],//多個錨點的位置聲明ConnectionsDetachable   : true,//串連是否可以使用滑鼠預設分離ConnectionOverlays  : [],//附加到每個串連的預設重疊Connector : "Bezier",//要使用的預設連接器的類型:折線,流程等Container : null,//設定父級的元素,一個容器DoNotThrowErrors  : false,//如果請求不存在的Anchor,Endpoint或Connector,是否會拋出DragOptions : { },//用於配置拖拽元素的參數DropOptions : { },//用於配置元素的drop行為的參數Endpoint : "Dot",//端點(錨點)的樣式聲明(Dot)Endpoints : [ null, null ],//多個端點的樣式聲明(Dot)EndpointOverlays : [ ],//端點的重疊EndpointStyle : { fill : "#456" },//端點的css樣式聲明EndpointStyles : [ null, null ],//同上EndpointHoverStyle : null,//滑鼠經過樣式EndpointHoverStyles : [ null, null ],//同上HoverPaintStyle : null,//滑鼠經過線的樣式LabelStyle : { color : "black" },//標籤的預設樣式。LogEnabled : false,//是否開啟jsPlumb的內部日誌記錄Overlays : [ ],//重疊MaxConnections : 1,//最大串連數PaintStyle : { lineWidth : 8, stroke : "#456" },//連線樣式ReattachConnections : false,//是否重新串連使用滑鼠分離的線RenderMode : "svg",//預設渲染模式Scope : "jsPlumb_DefaultScope"//範圍,標識

如果是全域則可以使用jsPlumb.importDefaults({···}),
也可以在執行個體化時,重新定義jsPlumb.getInstance({···}), Basic Concepts

jsPlumb關鍵點就是連接線,從上面也可以看出,大部分的配置項都是為了線而設。
其分為五個方面: Anchor:錨點位置 Endpoint:端點,串連的起點或終點 Connector:連線,串連兩個節點的直觀表現,有四種預設類型:Bezier(貝茲路徑),Straight(直線),Flowchart(流程圖),State machine(狀態機器) Overlay:裝飾連接器的組件,類似箭頭之類 Group:包含在某個其他元素中的一組元素,可以摺疊,導致與所有群組成員的串連被合并到摺疊的組容器上。 Anchor

錨點位置有四種類型: Static:靜態,會固定到元素上的某個點,不會移動 Dynamic:動態,是靜態錨的集合,就是jsPlumb每次串連時選擇最合適的錨 Perimeter anchors:周邊錨,動態錨的應用。 Continuous anchors:連續錨 Static
jsPlumb有九個預設位置,元素的四個角,元素的中心,元素的每個邊的中點。 Top(TopCenter),TopRight,TopLeft Right(RightMiddle) Bottom(BottomCenter),BottomRight,BottomLeft Left(LeftMiddle) center
可以使用基於數組的形式來定義錨點位置:[x,y,dx,dy,offsetX,offsetY]。
[0,0]表示節點的左上方。
x表示錨點在橫軸上的距離,y表示錨點在縱軸上的距離,這兩個值可以從0到1來設定,0.5為center。
而dx表示錨點向橫軸射出線,dy表示錨點向縱軸射出線,有0,-1,1三個值來設定。0為不放射線。
offsetX表示錨點位移量x(px),offsetY表示錨點位移量y(px)。

Dynamic Anchors
選擇每當某物移動或在UI中繪製時最合適的位置。

var dynamicAnchors = [ [0.2,0,0,0],"Top","Bottom" ]

在使用過程中,發現其就是指定錨點應該出現在哪個地方。jsPlumb會選取最近的點,來當作錨點。可以設定多個點,來當作可能出現的錨點。
當然,jsPlumb內建了預設的參數,AutoDefault。其實與["Top","Right","Bottom","Left"]相同。 Perimeter Anchors
jsPlumb提供了六種形狀: Circle Ellipse Triangle Diamond Rectangle Square

Continuous Anchors

anchor:"Continuous"//oranchor:["Continuous",{faces:["top","left"]}]

faces同樣有四個值:top,left,right,bottom。 將CSS類與Anchors相關聯

var ep = jsPlumb.addEndpoint("ele1",{  anchor:[0,0,0,0,0,0,"test"]});

也可以修改首碼:

jsPlumb.endpointAnchorClass="anchor_";
Connectors

連接器是實際串連UI元素的線,預設連接器是貝茲路徑,也就是預設值是"Bezier";
這裡才是畫線的地方, Bezier:它有一個配置項,curviness(彎曲度),預設為150.這定義了Bezier的控制點與錨點的距離 Straight:在兩個端點之間繪製一條直線,支援兩個配置參數:stub,預設為0。gap,預設為0 Flowchart:由一系列垂直或水平段組成的串連。支援四個參數,stub,預設為30;alwaysRespectStubs,預設為false;gap,預設為0;midpoint,預設為0.5;cornerRadius,預設為0; StateMachine:狀態器,支援在同一元素上開始和結束的串連,支援的參數有:margin,預設為5;curviness,預設為10;proximityLimit,預設為80; Endpoints

端點的配置和外觀參數。
jsPlumb帶有四個端點實現-點,矩形,空白和映像,可以在使用connect(),addEndpoint(),makeSource()或jsPlumb.makeTarget時使用endpoint參數指定Endpoint屬性。 給端點進行配置 jsPlumb.connect(),建立串連的時候可以配置端點的屬性 jsPlumb.addEndpoint(),建立一個新的端點時配置屬性 jsPlumb.makeSource(),配置元素並隨後從該元素中拖動串連時,將建立並分配一個新的端點 端點的預設類型

Dot:支援三個參數:
radius,預設為10px,定義圓點的半徑
cssClass,附加到Endpoint建立的元素的CSS類
hoverClass,一個CSS類,當滑鼠移至上方在元素或串連的線上時附加到EndPoint建立的元素

Rectangle:支援的參數:
width,預設為20,定義矩形的寬度
height,預設為20,定義矩形的高度
cssClass,附加到Endpoint建立的元素的CSS類
hoverClass,當滑鼠移至上方在元素或串連的線上時附加到EndPoint建立的元素 image:從給定的URL中繪製映像,支援三個參數:
src,必選,指定要使用的映像的URL,
cssClass,附加到Endpoint建立的元素的CSS類
hoverClass,當滑鼠移至上方在元素或串連的線上時附加到EndPoint建立的元素,

Blank:空白 Overlays(疊加層)

jsPlumb有五種類型的疊加:

Arrow:箭頭,在連接器的某個點繪製的可配置箭頭,可以控制箭頭的長度和寬度,參數有:
width,箭頭尾部的寬度
length,從箭頭的尾部到頭部的距離
location,位置,建議使用0~1之間,當作百分比,便於理解
direction,方向,預設值為1(表示向前),可選-1(表示向後)
foldback,折回,也就是尾翼的角度,預設0.623,當為1時,為正三角
paintStyle,樣式對象

Label:在連接點的可配置標籤,參數有
label,要顯示的文本
cssClass,Label的可選css
labelStyle,標籤外觀的選擇性參數:font,適應canvas的字型大小參數;color,標籤文本的顏色;padding,標籤的可選填充,比例而不是px;borderWidth,標籤邊框的選擇性參數,預設為0;borderStyle,顏色等邊框參數
location,位置,預設0.5
也可以使用getLabel,和setLabel,來擷取和設定label的文本,可傳函數

PlainArrow:箭頭形狀為三角形
只是Arrow的foldback為1時的例子,參數與Arrow相同

Diamond:棱形
同樣是Arrow的foldback為2時的例子,參數與Arrow相同

Custom:自訂
允許建立自訂的疊加層,需要使用create(),來返回DOM元素或者有效選取器(ID)
var conn = jsPlumb.connect({ source:"d1", target:"d2", paintStyle:{ stroke:"red", strokeWidth:3 }, overlays:[ ["Custom", { create:function(component) { return $("<select id='myDropDown'><option value='foo'>foo</option><option value='bar'>bar</option></select>"); }, location:0.7, id:"customOverlay" }] ] });

作為[0,1]的小數,其表示沿著由連接器內接的路徑的一些成比例的行程,預設值為0.5。
作為大於1的整數,表示從起點沿連接器行進的某些絕對像素數。等於1時,在終點。
作為小於零的整數,其指示沿著連接器從端點向後行進的一些絕對值的像素。等於0時,在起點。

所有疊加層都支援:
getLocation-返回當前位置
setLocation-設定當前位置 添加疊加層

例子:

jsPlumb.connect({  overlays:[    "Arrow",      [ "Label", { la

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.