參考 https://www.jianshu.com/p/c2c4f7fdffa1
jsPlumb支持綁定到Connections,Endpoints和Overlays上的幾個不同事件,以及jsPlumb對象本身。
jsPlumb事件
要在jsPlumb本身(或jsPlumb實例)上綁定事件,請使用jsPlumb.bind(event, callback)
jsPlumb.bind("connection", function(info) { .. update your model in here, maybe. });
可以在jsPlumb類上綁定的事件:
connection(info, originalEvent)- 通知連接建立
info具有的屬性:
connection
: 新連接,可以注冊監聽sourceId
: 連接的源元素idtargetId
: 連接的目標元素idsource
: 連接的源元素target
: 連接的目標元素sourceEndpoint
: 連接的源端點targetEndpoint
: 連接的目標端點
originalEvent:建立連接的原始鼠標事件。
注: jsPlumb.connect或者鼠標連線時觸發此事件
connectionDetached(info,originalEvent)- 通知連接斷開
info具有的屬性:
-
connection
: 已分離的連接 -
sourceId
: 分離之前連接的源元素id -
targetId
: 分離之前連接的目標元素id -
source
: 分離之前連接的源元素 -
target
: 分離之前連接的目標元素 -
sourceEndpoint
: 分離之前連接的源端點 -
targetEndpoint
: 分離之前連接的目標端點
連接到某個節點之前放棄新拖動的Connection時不會觸發此事件,可以使用connectionAborted捕獲。
originalEvent:斷開連接的原始鼠標事件。
connectionMoved(info,originalEvent)- 通知已將現有連接的源或目標端點拖動到某個新位置
info具有的屬性:
-
index
: 源端點為0,目標端點為1 -
originalSourceId
: 移動前連接的源元素id -
newSourceId
: 移動后連接的源元素id -
originalTargetId
: 移動前連接的目標元素id -
newTargetId
: 移動后連接的目標元素id -
originalSourceEndpoint
: 移動前的源端點 -
newSourceEndpoint
: 移動后的源端點 -
originalTargetEndpoint
: 移動前的目標端點 -
newTargetEndpoint
: 移動后的目標端點
connectionAborted(connection,originalEvent)在連接到端點或目標元素之前放棄拖動連接時觸發
connectionDrag(connection)- 正在拖動現有連接
注:當此事件觸發時,連接的目標端點是jsPlumb用於拖動的瞬態元素,隨后在建立或中止連接時將從DOM中刪除。
connectionDragStop(connection)- 連接拖動結束
click(connection, originalEvent)- 單擊連接
dblclick(connection, originalEvent)- 雙擊連接
endpointClick(connection, originalEvent)- 單擊端點
endpointDblClick(connection, originalEvent)- 雙擊端點
contextmenu(connection, originalEvent)- 右鍵單擊某個給定組件jsPlumb將報告對Connections和Endpoints的右鍵單擊
beforeDrop(info)- 刪除新連接或現有連接時觸發此事件
info具有的屬性:
-
index
: 源端點為0,目標端點為1 -
sourceId
: 連接的源元素id -
targetId
: 連接的目標元素id -
scope
: 連接的范圍 -
connection
: 實際的Connection對象。可以訪問Connection中的“端點”數組,以獲取連接中涉及的端點,但注意,在拖動連接時,目標端點將始終是僅在拖動的生命周期內存在的瞬態端點。要獲取正在刪除的連接端點,請使用dropEndpoint。 -
dropEndpoint
: 這是刪除連接的實際端點。可能為null,因為如果在已調用makeTarget的元素上刪除Connection,則不會設置它 -
targetEndpoint
: 分離之前Connection中的目標端點
beforeDetach(connection)- 斷開連接時觸發此事件。connection參數為剛斷開的Connection。如果此攔截器返回false將會中止連接斷開。
beforeDrag(connection)- 開始拖動新連接時觸發此事件。
-
endpoint
: 拖動連接的端點 -
source
: 端點所屬的源 -
sourceId
: 端點所屬的源ID
beforeDrag
與其他攔截器的操作略有不同:從攔截器函數返回false將取消當前拖動,也可以從攔截器返回一個對象,此對象將作為data
被傳進新連接的構造函數中:
jsPlumbInstance.bind("beforeDrag", function(params) { return { foo:"bar" } });
如果已定義參數化連接類型,此功能特別有用。使用此機制,可以使用選擇的數據填充新拖動的連接。
注: 1.7.6之前的所有jsPlumb版本,新的連接拖動以及拖動現有的連接都會觸發beforeDetach。從1.7.6開始,后一種行為已被移至 beforeStartDetach攔截器。
beforeStartDetach(connection)- 開始拖動現有連接時觸發此事件。
-
endpoint
: 拖動連接的端點 -
source
: 端點所屬的源 -
sourceId
: 端點所屬的源ID -
connection
: 即將被拖動的連接
返回false,取消拖動。
連接事件
綁定到Connection上的事件,還可以使用以下bind方法:
var connection = jsPlumb.connect({source:"d1", target:"d2"}); connection.bind("click", function(conn) { console.log("you clicked on ", conn); });
這些是可以綁定到連線事件:
click(connection, originalEvent)
- 單擊連接。dblclick(connection, originalEvent)
- 雙擊連接。contextmenu(connection, originalEvent)
- 右鍵單擊連線。mouseover(connection, originalEvent)
- 鼠標放在連線上。mouseout(connection, originalEvent)
- 鼠標移出連線。mousedown(connection, originalEvent)
- 連接上的鼠標按鈕被按下。mouseup(connection, originalEvent)
- 連接上的鼠標按鈕被釋放。
端點事件
綁定到端點上的事件,使用以下bind方法:
var endpoint = jsPlumb.addEndpoint("d1", { someOptions } ); endpoint.bind("click", function(endpoint) { console.log("you clicked on ", endpoint); });
這些是可以綁定到端點的事件:
click(endpoint, originalEvent)
- 單擊端點。dblclick(endpoint, originalEvent)
- 雙擊端點。contextmenu(endpoint, originalEvent)
- 右鍵單擊端點。mouseover(endpoint, originalEvent)
- 鼠標放在端點上。mouseout(endpoint, originalEvent)
- 鼠標移出端點。mousedown(endpoint, originalEvent)
- 端點上的鼠標按鈕被按下。mouseup(endpoint, originalEvent)
- 端點上鼠標按鈕被釋放。-
maxConnections(info, originalEvent)
- 在已具有最大連接數的端點上刪除連接。
info具有的屬性:- endpoint:刪除連線的端點
- connection:刪除的連接
- maxConnections:端點的maxConnections值
覆蓋事件
在Overlay上注冊事件偵聽器是一個稍微不同的過程 - 將它們作為Overlay構造函數的參數。
以下是在Overlay上注冊點擊監聽器的方法:
jsPlumb.connect({ source:"el1", target:"el2", overlays:[ [ "Label", { events:{ click:function(labelOverlay, originalEvent) { console.log("click on label overlay for :" + labelOverlay.component); } } }], [ "Diamond", { events:{ dblclick:function(diamondOverlay, originalEvent) { console.log("double click on diamond overlay for : " + diamondOverlay.component); } } }] ] });
解除綁定事件
在jsPlumb對象以及Connections和Endpoints上,可以使用unbind方法刪除監聽器。
//取消綁定事件 jsPlumb.unbind("click"); 或者 //解除所有事件 var e = jsPlumb.addEndpoint("someDiv"); e.bind("click", function() { ... }); e.bind("dblclick", function() { ... }); ... e.unbind("click");