拓撲圖編輯器-jsplumb連接

了解安裝和相關配置后,開始連線。

注:以下代碼全部使用jsPlumb調用api,開發(fā)過程中最好用上文提到的getInstance方法生成jsPlumb的獨立實例調用api。

程序化連接
jsPlumb.connect({source:"element1", target:"element2"});

創(chuàng)建了一個從'element1'到'element2'的連接。jsPlumb.connect方法的參數(shù)可以設置源端點、目標端點、錨點、端點樣式等,若沒有設置會顯示默認值:

  • 端點(Endpoint):默認是“Dot”,半徑為10,填充顏色為“#456”
  • 錨點(Anchors):默認是Bottom
  • 連接器(Connector):默認值為“Bezier”連接器,線寬8px,顏色為“#456”

因此,這個調用的渲染效果為:
一個8px Bezier,顏色為“#456”,從'element1'的底部中心到'element2'的底部中心的連線,每個Endpoint都是一個10px半徑的Dot Endpoint,顏色為“#456”。

增加一些配置:

jsPlumb.connect({
  source:"element1", 
  target:"element2",
  anchors:["Right", "Left" ],
  endpoint:"Rectangle",
  endpointStyle:{ fill: "yellow" }
});
連接類型

當鼠標放在連接上或者點擊連接,希望連接改變樣式時,可以通過設置連接類型實現(xiàn)。
端點或連接可以分配零個或多個類型,它們按照分配順序盡可能精細地合并。支持的API:

  • hasType
  • addType
  • removeType
  • toggleType
  • setType
  • clearTypes

(1) 點擊連接時,設置連接example提供的樣式:

jsPlumb.registerConnectionType("example", {
  paintStyle:{ stroke:"blue", strokeWidth:5  },
  hoverPaintStyle:{ stroke:"red", strokeWidth:7 }
});

var c = jsPlumb.connect({ source:"someDiv", target:"someOtherDiv" });
c.bind("click", function() {
  c.setType("example"); 
}); 

(2) 點擊連接時切換連接樣式:

jsPlumb.registerConnectionTypes({
  "basic": {
    paintStyle:{ stroke:"blue", strokeWidth:5  },
    hoverPaintStyle:{ stroke:"red", strokeWidth:7 },
    cssClass:"connector-normal"
  },
  "selected":{
    paintStyle:{ stroke:"red", strokeWidth:5 },
    hoverPaintStyle:{ strokeWidth: 7 },
    cssClass:"connector-selected"
  } 
});

var c = jsPlumb.connect({ source:"someDiv", target:"someOtherDiv", type:"basic" });

c.bind("click", function() {
  c.toggleType("selected");
});

(3) 完整的API示例:

jsPlumb.registerConnectionTypes({
  "foo":{ paintStyle:{ stroke:"yellow", strokeWidth:5, cssClass:"foo" } },
  "bar":{ paintStyle:{ stroke:"blue", strokeWidth:10 } },
  "baz":{ paintStyle:{ stroke:"green", strokeWidth:1, cssClass:"${clazz}" } },
  "boz":{ paintStyle: { stroke:"${color}", strokeWidth:"${width}" } }
});

var c = jsPlumb.connect({ 
  source:"someDiv", 
  target:"someOtherDiv", 
  type:"foo" 
});

// see what types the connection has.  
console.log(c.hasType("foo"));  // -> true
console.log(c.hasType("bar"));  // -> false

// add type 'bar'
c.addType("bar");

// toggle both types (they will be removed in this case)
c.toggleType("foo bar");

// toggle them back
c.toggleType("foo bar");

// getType returns a list of current types.
console.log(c.getType()); // -> [ "foo", "bar" ]

// set type to be 'baz' only
c.setType("baz");

// add foo and bar back in
c.addType("foo bar");

// remove baz and bar
c.removeType("baz bar");

// what are we left with? good old foo.
console.log(c.getType()); // -> [ "foo" ]

// now let's add 'boz', a parameterized type
c.addType("boz", {
  color:"#456",
  width:35
});

console.log(c.getType()); // -> [ "foo", "boz" ]

// now clear all types
c.clearTypes();

console.log(c.getType()); // -> [  ]

注:除了hasType之外的每個方法都可以使用以空格分隔的類型列表來處理

(4) 連接類型對象中支持的參數(shù)
連接類型并非支持Connection中的每個參數(shù) ,以下是連接類型對象中支持的屬性列表:

  • anchor: 用于連接的兩端
  • anchors: 用于連接的每一端
  • detachable: 連接是否可以使用鼠標拆卸
  • paintStyle:
  • hoverPaintStyle:
  • scope:
  • cssClass: 用于設置連接器元素的類
  • parameters: - 當添加/設置具有參數(shù)的Type時,將覆蓋具有相同鍵的任何現(xiàn)有參數(shù)。刪除具有參數(shù)的Type時,不會從連接器中刪除其參數(shù)
  • overlays: - 將多個類型應用于連接器時,將獲得跨各種類型定義的所有overlays的并集。注意當使用jsPlumb.connect創(chuàng)建連線并提供'type'時,相當于調用'addType',將獲得設置的Type和提供的任何其他類型定義的Overlays構造函數(shù)
  • endpoint
刪除節(jié)點
  • jsPlumb.remove
    從DOM中刪除元素,與元素關聯(lián)的Connections和Endpoints也會被刪除。
var conn = jsPlumb.connect({source:"element1", target:"element2"});
jsPlumb.remove("element1");

*jsPlumb.empty
將刪除某個元素下的所有子元素,以及與子元素關聯(lián)的Connections和Endpoints

<ul id="list">
  <li id="one">One</li>
</ul>

var conn = jsPlumb.connect({source:"one", target:"someOtherElement"});
...
jsPlumb.empty("list");

注:除了hasType之外的每個方法都可以使用以空格分隔的類型列表來處理

端點類型

可以在創(chuàng)建時以編程方式為端點分配一個或多個類型。
端點和連接類型之間唯一真正的區(qū)別是允許的參數(shù)。端點列表:

  • paintStyle
  • endpointStyle: 如果paintStyle提供此選項,則優(yōu)先
  • hoverPaintStyle
  • endpointHoverStyle: 如果hoverPaintStyle提供此項,則優(yōu)先
  • MaxConnections
  • connectorStyle: 使用此端點的任何連接器的樣式
  • connectorHoverStyle: 從此端點懸停連接的繪制樣式
  • connector: 連接器定義,比如: StateMachine或[ "Flowchart", { stub:50 } ]
  • connectionType: 這允許您指定從此端點進行的連接的連接類型。
  • scope: 端點只支持一個范圍。因此,如果應用了多個類型,則將從定義一個類型的最后一個類型中獲取范圍
  • cssClass: 與連線的CSS類相同
  • parameters: 當添加/設置具有參數(shù)的Type時,將覆蓋具有相同鍵的任何現(xiàn)有參數(shù)。刪除具有參數(shù)的Type時,不會從連接器中刪除其參數(shù)。
  • overlays: 將多個類型應用于端點時,將獲得跨各種類型定義的所有overlays的并集。
    注:傳遞給Connections的參數(shù)只對源端點生效,目標端點不生效
    使用端點類型的示例:
jsPlumb.registerEndpointTypes({
  "basic":{         
    paintStyle:{fill:"blue"}
  },
  "selected":{          
    paintStyle:{fill:"red"}
  }
});

var e = jsPlumb.addEndpoint("someElement", {
  anchor:"TopMiddle",
  type:"basic"
});

e.bind("click", function() {
  e.toggleType("selected");
});

注: 不會影響現(xiàn)有的Connections,僅影響在端點上設置新類型后創(chuàng)建的Connections。

刪除連接
刪除單個連接
var conn = jsPlumb.connect({source:"element1", target:"element2"});
jsPlumb.detach(conn);

調用jsPlumb.detach刪除連接時,與該連接關聯(lián)的端點會不會被刪除,取決于建立連接的方式。
以下情況,端點被刪除:

  • 使用jsPlumb.connect創(chuàng)建連接,沒有設置deleteEndpointsOnDetach: false
  • 連接由用戶在配置的元素上通過鼠標創(chuàng)建的,該元素makeSource沒有設置deleteEndpointsOnDetach: false。

以下情況,端點不被刪除:

  • 使用jsPlumb.connect創(chuàng)建連接,設置deleteEndpointsOnDetach: false
  • 端點由addEndpoint創(chuàng)建,連接由用戶通過鼠標創(chuàng)建
  • 連接由用戶在配置的元素上通過鼠標創(chuàng)建的,該元素makeSource設置deleteEndpointsOnDetach: false
單個元素中刪除所有連接
jsPlumb.deleteConnectionsForElement(el, [params])

el可以是:

  • 表示元素id的String
  • 一個DOM元素
  • 表示單個元素的選擇器

params是可選的,可能包含:
fireEvent - 是否觸發(fā)斷開連接事件。默認值為true。
注:端點被刪除情況同上

連接所有連接
jsPlumb.detachEveryConnection();

注:端點被刪除情況同上

刪除端點
刪除單個端點
var ep = jsPlumb.addEndpoint(someElement, { ... });
...
jsPlumb.deleteEndpoint(ep);

ep可以是:

  • 一個String,表示端點的UUID(添加端點時,可以為該端點設置uuid)
  • 一個實際的Endpoint對象(如上所示)
刪除所有端點
jsPlumb.deleteEveryEndpoint();

注:該方法會刪除所有端點和所有連接

選擇并操作Connections列表
選擇并操作端點列表

參考:
http://jsplumb.github.io/jsplumb/overlays.html

下一篇:拓撲圖編輯器-jsplum事件

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容