摘要:社區(qū)版本為開發(fā)者在他們的網(wǎng)頁上提供可視化的元素連接。在現(xiàn)代的瀏覽器使用,在和以下版本使用。建議用戶自己設(shè)置。到目前為止,一個在每個終點(diǎn)都有,在中間有一個標(biāo)簽,添加四個元素,實(shí)際添加的元素取決于渲染器使用的是還是。
jsPlumb社區(qū)版本為開發(fā)者在他們的網(wǎng)頁上提供可視化的元素連接。在現(xiàn)代的瀏覽器使用SVG,在IE8和以下版本使用VML。
jsPlumb沒有額外的依賴。
加載和配置jsPlumb默認(rèn)是注冊在瀏覽器的窗口(window)的,為整個頁面提供靜態(tài)實(shí)例。你也可以多帶帶實(shí)例化,使用getInstance 模塊,例如
var firstInstance = jsPlumb.getInstance();
變量firstInstance現(xiàn)在和jsPlumb變量一樣使用,你可以使用importDefault設(shè)置默認(rèn)參數(shù),調(diào)用connect函數(shù):
firstInstance.importDefaults({ Connector : [ "Bezier", { curviness: 150 } ], Anchors : [ "TopCenter", "BottomCenter" ] }); firstInstance.connect({ source:"element1", target:"element2", scope:"someScope" });
getInstance也可以帶參數(shù)
var secondInstance = jsPlumb.getInstance({ PaintStyle:{ lineWidth:6, strokeStyle:"#567567", outlineColor:"black", outlineWidth:1 }, Connector:[ "Bezier", { curviness: 30 } ], Endpoint:[ "Dot", { radius:5 } ], EndpointStyle : { fillStyle: "#567567" }, Anchor : [ 0.5, 0.5, 1, 1 ] }); secondInstance.connect({ source:"element4", target:"element3", scope:"someScope" });
建議自己進(jìn)行實(shí)例化。
元素IDjsPlumb通過id和元素交互,如果id沒有設(shè)置,jsPlumb會自動設(shè)置一個。建議用戶自己設(shè)置。
因?yàn)閖sp通過id管理元素,所以你得通知jsPlumb元素id的變化,
*jsPlumb.setId(el, newId)設(shè)置jsPlumb中的元素id
*jsPlumb.setIdChanged(oldId, newId)改變已有jsPlumb中的元素id
jsPlumb中大多數(shù)方法提供多種對指定元素進(jìn)行操作的格式。
jQuery中又選擇器的概念,例如$(".myClass")。在jsPlumb中同樣適用。
jsPlumb也提供NodeList,有幾種方式從DOM獲取到NodeList,最好用的方法是document.querySelectorAll("some selector")
使用jsPlumb時,你需要考慮UI部分的z-indices(Z指數(shù)),特別是不要讓jsPlumb添加到DOM上的元素不要遮蓋其他元素的交互。
jsPlumb為Endpoint, Connector and Overlay添加一個元素到DOM上。到目前為止,一個Connection在每個終點(diǎn)都有Endpoint,在中間有一個標(biāo)簽(label),jsPlumb添加四個元素,實(shí)際添加的元素取決于渲染器使用的是(SVG還是VML)。
為了讓你能正確地組織z參數(shù),jsPlumb給每個元素添加了CSS類,如下
Component Class
Endpoint _jsPlumb_endpoint
Connector _jsPlumb_connector
Overlay _jsPlumb_overlay
另外,無論什么時候,當(dāng)鼠標(biāo)經(jīng)過Endpoint或Connection上時,都會觸發(fā)_jsPlumb_hover這個類。關(guān)于jsPlumb CSS更多類的信息,訪問 this page
jsPlumb在哪兒添加元素?知道jsPlumb把新加的元素放在DOM的哪里很重要。如果你想要個簡介的版本(TL;DR(too long, didn’t read)),歸納如下:
強(qiáng)烈建議在使用jsPlumb前設(shè)置一個容器(Container)
容器就是你用來和jsPlumb添加的元素交互的一個母元素。
如果你沒有指定一個容器,jsPlumb會推斷你調(diào)用addEndpoint、makeSource、makeTarget的方法的第一個元素的offsetParent,或者connect的source元素的offsetParent作為容器。
下面是詳情:
早期版本的jsPlumb把body作為容器,好處是在支持那些可以連接(connect)的元素上很靈活,但是在一些具體案例中結(jié)果不是預(yù)期的。
設(shè)想一下,在標(biāo)簽里有幾個連接在一起的元素,你想在表單里添加元素,讓用戶切換表單時當(dāng)前的可以隱藏,那樣所有的jsPlumb相關(guān)元素都會被隱藏掉。但是當(dāng)元素都是在body上時,這就不會發(fā)生。
還有就是在一些元素里包含一個圖表,在溢出時會顯示滑動條,把元素添加到body可以避免這種事自動發(fā)生。
你可以通過setContainer指定作為jsPlumb添加元素的容器,或者在jsPlumb.getInstance參數(shù)中指定。
重要:如果你使用了jsPlumb的draggable方法使你的UI可以拖拽(不止是通過jsPlumb添加的),會發(fā)生意外。建議使用另一個實(shí)例操作,如:
var nonPlumbing = jsPlumb.getInstance(); nonPlumbing.draggable("some element");舉個栗子
設(shè)置容器,使用jQuery選擇機(jī)制,添加一個Endpoint,相關(guān)UI將作為document body的子元素:
jsPlumb.setContainer($("body")); jsPlumb.addEndpoint(someDiv, { endpoint options });
通過DOM
jsPlumb.setContainer(document.getElementById("foo")); jsPlumb.addEndpoint(someDiv, { endpoint options });
通過元素id
jsPlumb.setContainer("containerId"); jsPlumb.connect({ source:someDiv, target:someOtherDiv });`
通過實(shí)例化
var j = jsPlumb.getInstance({ Container:"foo" }); jsPlumb.addEndpoint(someDiv, { endpoint options });
你所選擇的容器會有osition:relative,因?yàn)閖sPlumb通過容器計(jì)算新元素添加的位置。
拖拽使用jsPlumb交互,拖拽很常見,可以通過下面來實(shí)現(xiàn):
myInstanceOfJsPlumb.draggable("elementId");
如果你不這么做的話,jsPlumb就不知道元素被拖拽了,就不能重新渲染頁面。
更多信息,請?jiān)L問 this page
執(zhí)行效率jsPlumb執(zhí)行速度和處理連接的上限取決于你所運(yùn)行的瀏覽器。目前,速度依次是Chrome,Safari,Firefox,IE版本越低執(zhí)行越慢。
每次調(diào)用connect,addEndpoint時都會重新渲染關(guān)聯(lián)節(jié)點(diǎn),大多數(shù)情況下這就是你想要的。如果你進(jìn)行大量操作,建議這樣干:
jsPlumb.setSuspendDrawing(true); ...
load up all your data here -
...
jsPlumb.setSuspendDrawing(false, true);
setSuspendDrawing通知jsPlumb要進(jìn)行大量重繪操作,就是repaintEverything。
這個函數(shù)進(jìn)入懸停繪畫(suspending drawing)模式,然后再進(jìn)入普通繪畫模式。
jsPlumb.batch(fn, [doNotRepaintAfterwards]);
舉個栗子
jsPlumb.batch(function() { // import here for (var i = 0, j = connections.length; i < j; i++) { jsPlumb.connect(connections[i]); } });
這里我們把connections當(dāng)作一個對象數(shù)組,以作為connect函數(shù)的參數(shù),例如:
{ source:"someElement", target:"someOtherElement" }
默認(rèn),會在函數(shù)末尾執(zhí)行重繪的,但是你可以不這么做,
jsPlumb.batch(function() { // import here }, true);
這個方法以前叫doWhileSuspended,1.7.3版本改了名字。
Continuous 需要最大的計(jì)算量
Dynamic and Perimeter是次慢的,Dynamic默認(rèn)有60個位置可供選擇
Static和Top`Bottom`一樣,是最快的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/86041.html
摘要:感受最容易最直觀是重寫的默認(rèn)配置。有效健,初始值如下注意的是。每條默認(rèn)設(shè)置的解釋對于那些沒有聲明的,對的和也適用。所有的和的給默認(rèn)使用是否可通過鼠標(biāo)分離當(dāng)被請求卻不存在時是否報錯默認(rèn)的遮罩可通過配置配置是否可以連接的定義的和默認(rèn)所有的通過 感受jsPlumb最容易最直觀是重寫jsPlumb的默認(rèn)配置。如果你沒這么做,你不得不每次調(diào)用都得重寫這些值。connect和addEndpoint...
摘要:公司項(xiàng)目需要用到繪圖框架,繪圖部分以前是另一位同事負(fù)責(zé),用的是框架。基于以上提及到的種種原因,上年年末我做起了技術(shù)調(diào)研,希望能找到一個合適我們項(xiàng)目的繪圖框架。兼容性問題項(xiàng)目對瀏覽器兼容性比較寬松,瀏覽器兼容性問題不在考慮范圍之內(nèi)。 showImg(https://ws3.sinaimg.cn/large/006tKfTcgy1g0ppk2kkhxj30ka0b4gm5.jpg); 公司...
摘要:公司項(xiàng)目需要用到繪圖框架,繪圖部分以前是另一位同事負(fù)責(zé),用的是框架。基于以上提及到的種種原因,上年年末我做起了技術(shù)調(diào)研,希望能找到一個合適我們項(xiàng)目的繪圖框架。兼容性問題項(xiàng)目對瀏覽器兼容性比較寬松,瀏覽器兼容性問題不在考慮范圍之內(nèi)。 showImg(https://ws3.sinaimg.cn/large/006tKfTcgy1g0ppk2kkhxj30ka0b4gm5.jpg); 公司...
摘要:使用的一個普通的特性就是元素的拖放。拖拽內(nèi)嵌元素拖拽多個元素拖拽時文本選中瀏覽器默認(rèn)的拖拽行為是選擇里的元素。廢止了這種行為,沒有。為了支持這種情況,被拖拽元素都增加了這個類。在拖拽結(jié)束后被去除。 使用jsPlumb的一個普通的特性就是元素的拖放。方法如下:myInstanceOfJsPlumb.draggable(elementId); 接受的參數(shù)類型 元素id的字符串 元素 li...
摘要:基于的,支持拖拽生成節(jié)點(diǎn),節(jié)點(diǎn)雙擊展示更多信息,節(jié)點(diǎn)連線,刪除節(jié)點(diǎn),刪除連線,重繪連接圖,當(dāng)前頁面刷新連接圖,根據(jù)畫連接圖等功能本章主要講拖拽生成節(jié)點(diǎn)獲取鏈接圖的信息引入需要的文件因?yàn)橐盟砸肓水嬤B接圖用因?yàn)橛玫乃赃@樣引入拖 基于vue的jsplumb,支持拖拽生成節(jié)點(diǎn),節(jié)點(diǎn)雙擊展示更多信息,節(jié)點(diǎn)連線,刪除節(jié)點(diǎn),刪除連線,重繪連接圖,當(dāng)前頁面刷新連接圖,根據(jù)json畫連接圖等功能...
閱讀 2384·2023-04-26 02:54
閱讀 2307·2021-10-14 09:43
閱讀 3341·2021-09-22 15:19
閱讀 2837·2019-08-30 15:44
閱讀 2697·2019-08-30 12:54
閱讀 980·2019-08-29 18:43
閱讀 1932·2019-08-29 17:12
閱讀 1325·2019-08-29 16:40