默認(rèn)配置
jsPlumb的配置項(xiàng)有很多,如果不主動(dòng)設(shè)置,jsPlumb就使用默認(rèn)配置。
建議不要修改默認(rèn)的配置,而是使用自定義的方式。
-
Anchor:錨點(diǎn),端點(diǎn)連接的位置 -
Anchors:多個(gè)錨點(diǎn),[源錨點(diǎn), 目標(biāo)錨點(diǎn)],默認(rèn)是BottomCenter -
Connector:連接線(比如:["Bezier", {curviness: 63}]為貝塞爾曲線) -
ConnectionsDetachable:節(jié)點(diǎn)是否可以用鼠標(biāo)拖動(dòng)使其斷開,默認(rèn)為true。即用鼠標(biāo)連接上的連線,也可以使用鼠標(biāo)拖動(dòng)讓其斷開。設(shè)置成false,可以讓其拖動(dòng)也不會(huì)自動(dòng)斷開 -
Container: 容器 -
DoNotThrowErrors:當(dāng)錨點(diǎn)(Anchor)、端點(diǎn)(endPoint)和連接器(Connector)不存在的時(shí)候是否拋出異常 -
ConnectionOverlays:連接的覆蓋層 -
DragOptions:為被 jsPlumb.draggable 設(shè)置了拖拽的元素拖拽時(shí)設(shè)置的css樣式.eg:
hoverClass: "dropHover",//釋放時(shí)指定鼠標(biāo)停留在該元素上使用的css class;
activeClass: "dragActive"http://可拖動(dòng)的元素使用的css class -
Endpoint: 端點(diǎn)的形狀定義,比如圓:[ "Dot", { radius:5 } ];正方形:Rectangle -
Endpoints:設(shè)置了連接器的源和目標(biāo)端點(diǎn)的形狀,[源端點(diǎn), 目標(biāo)端點(diǎn)], 圓: [ [ "Dot", { radius:7 } ], [ "Dot", { radius:11 } ] ] -
EndpointOverlays: 端點(diǎn)的覆蓋層 -
EndpointStyle:端點(diǎn)樣式 -
EndpointStyles:[源端點(diǎn)樣式,目標(biāo)端點(diǎn)樣式] -
EndpointHoverStyle:端點(diǎn)的hover狀態(tài)樣式 -
EndpointHoverStyles: [源端點(diǎn)鼠標(biāo)hover樣式,目標(biāo)端點(diǎn)鼠標(biāo)hover樣式] -
HoverPaintStyle:鼠標(biāo)經(jīng)過連接線時(shí)的樣式 -
LabelStyle: 標(biāo)簽樣式 -
LogEnabled:jsPlumb內(nèi)部日志是否開啟。 -
Overlays:連接線和端點(diǎn)的遮罩層樣式,裝飾連接器,如標(biāo)簽、箭頭等 -
MaxConnections:設(shè)置連接點(diǎn)最多可以連接幾條線,最大連接線數(shù)量默認(rèn)為1, 設(shè)置成-1可以表示無數(shù)個(gè)連接 -
PaintStyle:設(shè)置連線樣式 -
connectorStyle:設(shè)置連接線樣式 -
ReattachConnections:端點(diǎn)是否可以再次重新鏈接 -
RenderMode:渲染模式,默認(rèn)是svg -
Scope:作用域,用來區(qū)分哪些端點(diǎn)可以鏈接,作用域相同的可以鏈接
錨點(diǎn)(Anchor)
1 . 錨位置:
jsPlumb有九個(gè)默認(rèn)錨點(diǎn)位置,可用于指定連接器連接到元素的位置:分別是元素的四個(gè)角,元素的中心以及元素每個(gè)邊的中點(diǎn):
-
Top(TopCenter) TopRight-
Right(RightMiddle) BottomRight-
Bottom(BottomCenter) BottomLeft-
Left(LeftMiddle) TopLeftCenter
//定義一個(gè)底部中間的錨點(diǎn)位置
jsPlumb.connect({...., anchor:"Bottom", ... });
2、基于數(shù)組的語法[x,y,dx,dy]
- x-相對(duì)該錨點(diǎn)在x軸坐標(biāo)比例(最大1)
- y-相對(duì)該錨點(diǎn)y軸坐標(biāo)比例(最大1)
- dx-控制錨的方向,x軸正向?yàn)?,負(fù)向?yàn)?1
- dy-控制錨的方向,y軸正向?yàn)?,負(fù)向?yàn)?1

//定義了一個(gè)在底部中間的錨點(diǎn)位置
jsPlumb.connect({...., anchor: [ 0.5, 1, 0, 1 ], ... });
除了提供錨點(diǎn)的位置和方向外,還可以選擇提供另外兩個(gè)參數(shù)來定義與給定位置的像素偏移量。這是上面指定的錨點(diǎn),但在y軸正方向有50像素偏移:
jsPlumb.connect({...., anchor:[ 0.5, 1, 0, 1, 0, 50 ], ... });
3、動(dòng)態(tài)錨
連線時(shí)錨點(diǎn)根據(jù)位置自動(dòng)調(diào)整到定義的數(shù)組里幾個(gè)點(diǎn)中最合適的位置
創(chuàng)建動(dòng)態(tài)錨點(diǎn)沒有特殊的語法,只需提供一系列單獨(dú)的靜態(tài)錨點(diǎn),例如:
var dynamicAnchors = [ [ 0.2, 0, 0, -1 ], [ 1, 0.2, 1, 0 ], [ 0.8, 1, 0, 1 ], [ 0, 0.8, -1, 0 ] ];
jsPlumb.connect({...., anchor:dynamicAnchors, ... });
或者混合使用
var dynamicAnchors = [ [ 0.2, 0, 0, -1 ], [ 1, 0.2, 1, 0 ], "Top", "Bottom" ];
jsPlumb.connect({...., anchor:dynamicAnchors, ... });
- 默認(rèn)動(dòng)態(tài)錨點(diǎn)
jsPlumb提供了動(dòng)態(tài)錨AutoDefault,選擇順序:Top,Right,Bottom和Left:
jsPlumb.connect({...., anchor:"AutoDefault", ... });
4、多邊形錨
不理解多邊形錨,可以參考jsplumb中的demo/perimeterAnchors,拖動(dòng)節(jié)點(diǎn)試一下效果
jsPlumb支持六種形狀:
-
Circle(圓) -
Ellipse(橢圓) -
Triangle(三角形) -
Diamond(菱形) -
Rectangle(矩形) -
Square(正方形)
(1) 單個(gè)多邊形
jsPlumb.addEndpoint("someElement", {
endpoint:"Dot",
anchor:[ "Perimeter", { shape:"Circle" } ]
});
如果節(jié)點(diǎn)的寬高一樣,該錨點(diǎn)位置為動(dòng)態(tài)圓周,寬高不同為橢圓。
默認(rèn)情況下,錨點(diǎn)個(gè)數(shù)為60,可以手動(dòng)指定:
jsPlumb.addEndpoint("someDiv", {
endpoint:"Dot",
anchor:[ "Perimeter", { shape:"Square", anchorCount:150 }]
});
(2) 組合錨點(diǎn)(三角形與菱形):
jsPlumb.connect({
source:"someDiv",
target:"someOtherDiv",
endpoint:"Dot",
anchors:[
[ "Perimeter", { shape:"Triangle" } ],
[ "Perimeter", { shape:"Diamond" } ]
]
});
(3) 自定義角度多邊形錨點(diǎn)
jsPlumb.connect({
source:"someDiv",
target:"someOtherDiv",
endpoint:"Dot",
anchors:[
[ "Perimeter", { shape:"Triangle", rotation:25 } ],
[ "Perimeter", { shape:"Triangle", rotation:-335 } ]
]
});
上面定義了兩個(gè)三角形旋轉(zhuǎn)不同角度得到的組合圖形。
旋轉(zhuǎn)適用帶角度的多邊形,該值必須以角度為單位,而不是弧度,并且數(shù)字可以是正數(shù)或負(fù)數(shù)
5、CSS類和錨點(diǎn)
錨點(diǎn)的不同位置可以有多種css樣式,那就要有不同的css類提供支持。
(1) 被寫入到錨點(diǎn)的CSS類和元素以jsPlumb實(shí)例的endpointAnchorClass為前綴,默認(rèn)為:
jtk-endpoint-anchor-
var ep = jsPlumb.addEndpoint("someDiv", {
anchor:[0.5, 0, 0, -1, 0, 0, "top" ]
};
jsPlumb將會(huì)分配這個(gè)類給創(chuàng)建的 endpoint 和元素 someDiv:
jsplumb-endpoint-anchor-top
(2) 動(dòng)態(tài)錨的示例:
var ep = jsPlumb.addEndpoint("someDiv", {
anchor:[
[ 0.5, 0, 0, -1, 0, 0, "top" ],
[ 1, 0.5, 1, 0, 0, 0, "right" ]
[ 0.5, 1, 0, 1, 0, 0, "bottom" ]
[ 0, 0.5, -1, 0, 0, 0, "left" ]
]
});
這里,分配給Endpoint和Element的類將在錨位置更改時(shí)循環(huán)顯示這些值:
jsplumb-endpoint-anchor-top
jsplumb-endpoint-anchor-right
jsplumb-endpoint-anchor-left
jsplumb-endpoint-anchor-bottom
注意,如果提供的類名由多個(gè)術(shù)語組成,則jsPlumb不會(huì)在該類中的每個(gè)術(shù)語前添加前綴:
var ep = jsPlumb.addEndpoint("someDiv", {
anchor:[ 0.5, 0, 0, -1, 0, 0, "foo bar" ]
});
將導(dǎo)致將2個(gè)類添加到端點(diǎn)和元素:
jtk-endpoint-anchor-foo和bar
(3) 更改錨類前綴
與錨類一起使用的前綴為jsPlumb的endpointAnchorClass??梢栽趈sPlumb的某個(gè)實(shí)例上將其更改為喜歡的任何內(nèi)容:
jsPlumb.endpointAnchorClass = "anchor_";
或者
var jp = jsPlumb.getInstance();
jp.endpointAnchorClass = "anchor_";
連接器(Connectors)
jsPlumb提供了四種連接線:
-
straight(直線) -
Bezier(貝塞爾曲線),默認(rèn) -
flowchart(流程圖) -
state machine(狀態(tài)機(jī))
straight
在兩個(gè)端點(diǎn)之間畫一條直線。 支持兩個(gè)參數(shù):
stub:可選,默認(rèn)為0px。此參數(shù)的任何正值將導(dǎo)致在與連接線的兩端產(chǎn)生一段不可改變方向的線段
gap:可選,默認(rèn)為0px。在連接線的一端和連接的元素之間指定一個(gè)間隙。
Bezier
貝塞爾提供了一個(gè)立方的貝塞爾曲線。 支持一個(gè)參數(shù):
curviness:可選,默認(rèn)為150px。 定義了曲線的彎曲程度。
flowchart
垂直或水平的連接線,支持四個(gè)參數(shù):
stub:可選,最小長(zhǎng)度,以像素為單位,最初的存根,源自一個(gè)端點(diǎn)。可以是整數(shù),指定了連接器的每個(gè)末端的存根,或是一個(gè)整數(shù)數(shù)組,指定[源, 目標(biāo)]端點(diǎn)的連接。默認(rèn)值為30像素的整數(shù)
alwaysRespectStubs:可選,默認(rèn)為false,此參數(shù)表示jsPlumb始終從每個(gè)端點(diǎn)繪制指定存根長(zhǎng)度,而不是比較兩個(gè)元素的存根
gap:可選,默認(rèn)為0像素。在連接線的一端和連接的元素之間指定一個(gè)間隙。
midpoint:可選,默認(rèn)為0.5。兩個(gè)元素之間的距離。
cornerRadius:默認(rèn)為0。此參數(shù)的正值將改變彎角的度數(shù)。
state machine
略微彎曲的線(實(shí)際上是二次Bezier曲線),類似于狀態(tài)機(jī)的連接器,支持三個(gè)參數(shù):
margin:可選,默認(rèn)為5。定義連接線開始/結(jié)束的元素的距離。
curviness:可選的,默認(rèn)為10,定義了曲線的彎曲程度。
proximityLimit:可選,默認(rèn)為80。 連接線的兩端之間的最小距離,它描繪為一條直線而非二次貝塞爾曲線。
端點(diǎn)(Endpoints)
端點(diǎn)是連接里的一個(gè)端點(diǎn)外觀和行為表現(xiàn)的集合,jsPlumb實(shí)現(xiàn)了四個(gè)端點(diǎn):
- Dot(點(diǎn))
- Rectangle(矩形)
- Blank(空)
- image(圖像)
創(chuàng)建端點(diǎn)
端點(diǎn)以多種不同方式創(chuàng)建:
(1) 調(diào)用jsPlumb.connect(..)并傳遞元素id或DOM元素作為源/目標(biāo),創(chuàng)建并分配新的端點(diǎn)
jsPlumb.connect({
source: 'item_left',
target: 'item_right',
endpoint: 'Rectangle'
})
(2) 調(diào)用jsPlumb.addEndpoint(...)創(chuàng)建新的端點(diǎn)
jpInstance.addEndpoint("myDivId", EndpointConfig)
(3) 使用jsPlumb.makeSource(...)并隨后從該元素拖動(dòng)連接時(shí),將創(chuàng)建并分配新的端點(diǎn)
jsPlumb.makeSource("el1", {
anchor:"Continuous",
endpoint:["Rectangle", { width:40, height:20 }],
maxConnections:3
});
Dot
在屏幕上繪制一個(gè)點(diǎn),支持三個(gè)參數(shù):
radius:可選,默認(rèn)為10像素。 定義點(diǎn)的半徑
cssClass:可選,端點(diǎn)元素的CSS類
hoverClass: 可選,元素或連線的hover屬性樣式類
Rectangle
繪制一個(gè)矩形。 支持構(gòu)造函數(shù)參數(shù)有:
width:可選,默認(rèn)為20像素。定義矩形的寬度
height:可選,默認(rèn)為20像素。定義矩形的高
cssClass:可選,端點(diǎn)元素的CSS類
hoverClass:可選,元素或連線的hover屬性樣式類
Image
從一個(gè)指定的URL加載圖像,支持三個(gè)參數(shù):
src:圖片的url
cssClass:可選,端點(diǎn)元素的CSS類
hoverClass:可選,元素或連線的hover屬性樣式類
覆蓋(Overlays)
jsPlumb有五個(gè)類型的覆蓋:
-
Arrow(箭頭) :沿連接器某點(diǎn)繪制的可配置箭頭??梢钥刂萍^的長(zhǎng)度和寬度,'折返'點(diǎn) - 尾點(diǎn)折回的點(diǎn)和方向(允許值為1和-1; 1是默認(rèn)值,表示指向連接的方向) -
Label(標(biāo)簽):在連接器的某個(gè)點(diǎn)上繪制的可配置標(biāo)簽 -
PlainArrow(平原箭頭):箭頭形狀為三角形,沒有折返 -
Diamond(鉆石):鉆石箭頭 -
Custom(自定義):可自定義DOM元素
位置
位置表明連接元素在連接線的位置,通常有三種表明方式:
- [0 . . 1]范圍內(nèi)的小數(shù),表示沿連接器內(nèi)的比例。默認(rèn)值0.5,意味著連接器上的Overlay的默認(rèn)位置是沿連接器的一半
- 大于1的整數(shù),表示從起點(diǎn)沿連接器行進(jìn)的一些絕對(duì)像素?cái)?shù)
- 小于零的整數(shù),表示從終點(diǎn)沿連接器向后行進(jìn)的一些絕對(duì)像素?cái)?shù)
對(duì)于端點(diǎn),適用相同的原則,將位置指定為[x,y]數(shù)組
(1) 指定一個(gè)覆蓋在端點(diǎn)的中心位置:
location:[ 0.5, 0.5 ]
(2) 從左上角沿x軸疊加5像素
location: [ 5, 0 ]
(3) 從右下角沿x軸疊加5像素
location: [ -5, 0 ]
對(duì)于位置的操作,jsPlumb提供了兩個(gè)方法:
- getLocation:返回當(dāng)前位置
- setLocation:設(shè)置當(dāng)前位置,對(duì)于端點(diǎn),位置以[x,y]數(shù)組表示,其值與端點(diǎn)的寬度/高度成正比(0-1(包括0-1)的小數(shù))或絕對(duì)值(小數(shù)大于0)
添加覆蓋層
(1) jsPlumb.connect調(diào)用時(shí)
使用箭頭的默認(rèn)選項(xiàng)和帶有文本“foo”的標(biāo)簽創(chuàng)建一個(gè)箭頭
jsPlumb.connect({
...
overlays:[
"Arrow",
[ "Label", { label:"foo", location:0.25, id:"myLabel" } ]
],
...
});
這個(gè)連接將有一個(gè)位于中間的箭頭,位于四分之一的標(biāo)簽“foo”。注意id參數(shù),如果希望刪除覆蓋層或更改其可見性,可以在以后使用它
(2) jsPlumb.addEndpoint調(diào)用時(shí)
注:在addEndpoint 使用 connectorOverlays 代替 overlays,因?yàn)?overlays指向端點(diǎn)覆蓋。
此連接將有一個(gè)位于連接頭部的10x30箭頭,標(biāo)簽“foo”位于中間點(diǎn)。端點(diǎn)本身也有一個(gè)覆蓋,相對(duì)于端點(diǎn)的左上角位于[-0.5 *寬度,-0.5 *高度]
jsPlumb.addEndpoint("someDiv", {
...
overlays:[
[ "Label", { label:"foo", id:"label", location:[-0.5, -0.5] } ]
],
connectorOverlays:[
[ "Arrow", { width:10, length:30, location:1, id:"arrow" } ],
[ "Label", { label:"foo", id:"label" } ]
],
...
});
(3) jsPlumb.makeSource調(diào)用
同樣使用 connectorOverlays,而且 makeSource 支持 endpoint 參數(shù)。
此連接將有10x30像素箭坐落在連接頭,標(biāo)簽“foo”位于中點(diǎn)。
jsPlumb.makeSource("someDiv", {
...
endpoint:{
connectorOverlays:[
[ "Arrow", { width:10, length:30, location:1, id:"arrow" } ],
[ "Label", { label:"foo", id:"label" } ]
]
}
...
});
注: jsPlumb.makeTarget調(diào)用時(shí)不能添加覆蓋層
(4) addOverlay調(diào)用
端點(diǎn)和連接都有一個(gè)addOverlay方法,它將一個(gè)Overlay定義作為參數(shù)
var e = jsPlumb.addEndpoint("someElement");
e.addOverlay([ "Arrow", { width:10, height:10, id:"arrow" }]);
覆蓋類型
(1) Arrow(箭頭)
繪制一個(gè)箭頭,使用四個(gè)點(diǎn):頭部和兩個(gè)尾點(diǎn),以及一個(gè)foldback允許箭頭尾部縮進(jìn)的點(diǎn)。此Overlay的可用構(gòu)造函數(shù)參數(shù):
- width: 箭頭尾部的寬度
- length: 從箭頭尾部到頭部的距離
- location: 在連線上的位置
- direction: 指向,1(默認(rèn)值,表示向前,-1,表示向后
- foldback: 沿著箭頭的軸線指向尾部折返的距離。默認(rèn)值為0.623
- paintStyle: Endpoints 和 Connectors 的樣式對(duì)象
(2) PlainArrow
Arrow的foldback為1 的特殊實(shí)例,意味著箭頭的尾部是扁平。Arrow的所有構(gòu)造函數(shù)參數(shù)都適用于PlainArrow
(3) 鉆石
Arrow的foldback為2,意味著箭頭變成鉆石。Arrow的所有構(gòu)造函數(shù)參數(shù)都適用于Diamond。
(4) 標(biāo)簽
提供用于裝飾連接器的文本標(biāo)簽??捎玫臉?gòu)造函數(shù)參數(shù)是:
- label : 顯示的文本。 可以提供一個(gè)函數(shù),而不是純文本:作為參數(shù)傳遞給Connection,應(yīng)該返回一個(gè)String
- cssClass: 用于Label的可選css類。建議使用
- labelStyle: 標(biāo)簽外觀的可選參數(shù)。 可用參數(shù)有:
font: 適合Canvas元素的格式的字體字符串
fillStyle: 標(biāo)簽的背景顏色填充,可選。
color: 字體顏色,可選
padding: 表示標(biāo)簽的寬度的比例,而不是px和ems。
borderWidth: 標(biāo)簽的邊框?qū)挾?,默認(rèn)0
borderStyle: 標(biāo)簽邊框的樣式,可選 - location: 標(biāo)簽位置
標(biāo)簽覆蓋提供了兩個(gè)方法 getLabel 和 setLabel 用于動(dòng)態(tài)地get/set標(biāo)簽內(nèi)容:
var c = jsPlumb.connect({
source:"d1",
target:"d2",
overlays:[
[ "Label", {label:"FOO", id:"label"}]
]
});
...
var label = c.getOverlay("label");
console.log("Label is currently", label.getLabel());
label.setLabel("BAR");
console.log("Label is now", label.getLabel());
標(biāo)簽被賦予一個(gè)id ‘label’,然后檢索這個(gè)id動(dòng)態(tài)設(shè)置lable的值。
Connections和Endpoints都支持Label Overlays,并且因?yàn)楦臉?biāo)簽是一種非常常見的操作,所以setLabel和getLabel方法已添加到這些對(duì)象中:
var conn = jsPlumb.connect({
source:"d1",
target:"d2",
label:"FOO"
});
...
console.log("Label is currently", conn.getLabel());
conn.setLabel("BAR");
console.log("Label is now", conn.getLabel());
這些方法支持傳入Function而不是String,如果在調(diào)用setLabel時(shí),jsPlumb將為您創(chuàng)建一個(gè)標(biāo)簽覆蓋:
var conn = jsPlumb.connect({
source:"d1",
target:"d2"
});
...
conn.setLabel(function(c) {
var s = new Date();
return s.getTime() + "milliseconds have elapsed since 01/01/1970";
});
console.log("Label is now", conn.getLabel());
(5) Custom(自定義)
jsPlumb允許自定義OverLays,只需要實(shí)現(xiàn) create(component):
自定義覆蓋允許創(chuàng)建自己的覆蓋層,jsPlumb將為您定位。只需要實(shí)現(xiàn)一個(gè)方法 - create(component):
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"
}]
]
});
此處的id為 customeOverlay,可以在 Connection 或者 Endpoint上使用 getOverlay(id) 方法。
隱藏/顯示覆蓋層
可以使用 setVisible 方法控制 Overlays 的顯示屬性,或者在一個(gè)連接上使用 showOverlay(id)和 hideOverlay(id)。
(1) 使用id
var connection = jsPlumb.connect({
...
overlays:[
"Arrow",
[ "Label", { label:"foo", location:0.25, id:"myLabel" } ]
],
...
});
// time passes
var overlay = connection.getOverlay("myLabel");
// now you can hide this Overlay:
overlay.setVisible(false);
// there are also hide/show methods:
overlay.show();
overlay.hide();
(2) 使用 showOverlay(id) 和 hideOverlay(id)
Connection 和 Endpoint 可以使用showOverlay(id) 和 hideOverlay(id):
var connection = jsPlumb.connect({
...
overlays:[
"Arrow",
[ "Label", { label:"foo", location:-30 , id:"myLabel" }]
],
...
});
// time passes
connection.hideOverlay("myLabel");
// more time passes
connection.showOverlay("myLabel");
刪除 Overlays
Connection和Endpoint有一個(gè)removeOverlay方法,可以刪除覆蓋
var connection = jsPlumb.connect({
...
overlays:[
"Arrow",
[ "Label", { label:"foo", location:0.25 , id:"myLabel"} ]
],
...
});
// time passes
connection.removeOverlay("myLabel");
參考:
http://jsplumb.github.io/jsplumb/overlays.html
http://www.itdecent.cn/p/0e7bb5c081c8
下一篇:拓?fù)鋱D編輯器-jsplum連接