亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解js中構造流程圖的核心技術JsPlumb

2019-11-20 11:03:54
字體:
來源:轉載
供稿:網友

項目里面用到了Web里面的拖拽流程圖的技術JsPlumb,其實真不算難,不過項目里面用HTML做的一些類似flash的效果,感覺還不錯,在此分享下。

一、效果圖展示

1、從左邊拖動元素到中間區域,然后連線

2、連線類型可以自定義:這里定義為直線、折線、曲線。實際項目中根據業務我們定義為分裝線、分裝支線、總裝線等

3、鼠標拖動區域選中元素,并且選中元素統一拖動位置。

4、對選中的元素左對齊。

5、對選中元素居中對齊

6、右對齊

7、上對齊

8、垂直居中對齊

9、下對齊

10、根據第一個選中的元素上下靠攏

11、根據第一個選中的元素左右靠攏

12、根據第一個選中的元素同高

13、根據第一個選中的元素同寬

14、選中元素順時針旋轉,點擊一次旋轉45度

15、選中元素逆時針旋轉。

16、選中統一刪除元素以及元素上面的連線

這里很多效果其實在項目中作用并不太大,很多單純就是為了展示用的。

二、代碼詳解
這里涉及的效果比較多,可能要分多篇來介紹。這篇還是來看看構造流程圖的核心技術:JsPlumb。

1、概述
關于JsPlumb的內容,在此就簡單說明下吧。jsPlumb是一個強大的JavaScript連線庫,它可以將html中的元素用箭頭、曲線、直線等連接起來,適用于開發Web上的圖表、建模工具等。它同時支持jQuery+jQuery UI、MooTools和YUI3這三個JavaScript框架,十分強大。本項目中還是結合大家最熟悉的JQuery來講解。并且還要注意的一點就是JsPlumb的瀏覽器兼容性,JsPlumb支持IE 6以上、火狐、谷歌等各種瀏覽器

2、使用
(1)引入JS文件
可以直接去官網上面下載最新的js庫,由于JsPlumb需要JQuery的支持,按照網上的說法,它只兼容jQuery1.3.x及以上版本,并在jQuery UI 1.7.x、1.8.x及1.9.x上測試通過。所以我們需要下載較高一點版本的JQuery和JQuery UI。關于JsPlumb的內容只需要引用一個Js即可。類似

<script src="~/Content/jquery-1.9.1.min.js"></script><script src="~/Content/jquery-ui-1.11.4.custom/jquery-ui.js"></script><link href="~/Content/jquery-ui-1.11.4.custom/jquery-ui.min.css" rel="stylesheet" /><script src="~/Content/jsPlumb-master/dist/js/jquery.jsPlumb-1.7.5.js"></script>

(2)初始化
使用JsPlumb需要注意一點,JsPlumb的連線的樣式是由點確定的,也就是說點的樣式里面包含了相關的屬性來說明當使用此點來連線的時候,連線的樣式應該是什么樣的。
在我們項目里面,左邊的模型區域,中間才是設計區域。那么要將一個元素從模型區域創建出來,就要用到我們JQuery UI里面的draggable和droppable事件。首先我們注冊左邊模型的draggable和中間區域的droppable事件。

cshtml頁面代碼,<div id="divContentLeftMenu">這個是左邊模型的容器,<div id="divCenter"></div>表示中間區域容器。
      

<div id="divContentLeftMenu">      <div class="sidebar-menu" id="divSidebar">        <a href="#plantmodel" onclick="Resize()" class="nav-header menu-first collapsed" data-toggle="collapse">工廠模型</a>        <ul id="plantmodel" class="nav nav-list collapse menu-second">        </ul>        <a href="#artlinemodel" onclick="Resize()" class="nav-header menu-first collapsed" data-toggle="collapse">工藝段模型</a>        <ul id="artlinemodel" class="nav nav-list collapse menu-second">          <li>            <a href="#">              <div class="node radius" id="node4" dbtype="DTO_TM_ART_LINE">                <label>工段</label>              </div>            </a>          </li>          <li>            <a href="#">              <div class="node" id="node5" dbtype="DTO_TM_ULOC">                <label>工位</label>              </div>            </a>          </li>        </ul>      </div>    </div>    <div id="divCenter"></div>

Js代碼:
首先我們定義幾個點的樣式的全局變量

//基本連接線樣式var connectorPaintStyle = {  strokeStyle: "#1e8151",  fillStyle: "transparent",  radius: 5,  lineWidth: 2};// 鼠標懸浮在連接線上的樣式var connectorHoverStyle = {  lineWidth: 3,  strokeStyle: "#216477",  outlineWidth: 2,  outlineColor: "white"};var endpointHoverStyle = {  fillStyle: "#216477",  strokeStyle: "#216477"};//空心圓端點樣式設置var hollowCircle = {  DragOptions: { cursor: 'pointer', zIndex: 2000 },  endpoint: ["Dot", { radius: 7 }], //端點的形狀  connectorStyle: connectorPaintStyle,//連接線的顏色,大小樣式  connectorHoverStyle: connectorHoverStyle,  paintStyle: {    strokeStyle: "#1e8151",    fillStyle: "transparent",    radius: 5,    lineWidth: 2  },    //端點的顏色樣式  //anchor: "AutoDefault",  isSource: true,  //是否可以拖動(作為連線起點)  connector: ["Straight", { stub: [0, 0], gap: 10, cornerRadius: 5, alwaysRespectStubs: true }], //連接線的樣式種類有[Bezier],[Flowchart],[StateMachine ],[Straight ]  isTarget: true,  //是否可以放置(連線終點)  maxConnections: -1,  // 設置連接點最多可以連接幾條線  connectorOverlays: [["Arrow", { width: 10, length: 10, location: 1 }]]};

然后再頁面初始化完成之后注冊事件

        $(function(){        //左邊區域的draggable事件        $("#divContentLeftMenu .node").draggable({          helper: "clone",          scope: "plant"        });        //中間拖拽區的drop事件        $("#divCenter").droppable({          scope: "plant",          drop: function (event, ui) {            // 創建工廠模型到拖拽區            CreateModel(ui, $(this));          }        });        });   //1.創建模型(參數依次為:drop事件的ui、當前容器、id、當前樣式) function CreateModel(ui, selector) {    //1.1 添加html模型    var modelid = $(ui.draggable).attr("id");    i++;    var id = modelid + i;    var cur_css = modelid;    var type = $(ui.helper).attr("dbtype");    $(selector).append('<div class="node ' + cur_css + '" id="' + id + '" dbtype="' + type + '" parentid="' + $(selector).attr("id") + '" onclick="oInitElement.GetPropertiesByType(/'' + type + '/',this)" ondblclick="InitStation().DbClick(/'' + type + '/',this)" >' + $(ui.helper).html() + '</div>');    var left = parseInt(ui.offset.left - $(selector).offset().left);    var top = parseInt(ui.offset.top - $(selector).offset().top);    $("#" + id).css("left", left).css("top", top);    //jsPlumb.setContainer($("#divCenter"));    //1.2 添加連接點    jsPlumb.addEndpoint(id, { anchors: "RightMiddle" }, hollowCircle);    jsPlumb.addEndpoint(id, { anchors: "LeftMiddle" }, hollowCircle);    jsPlumb.addEndpoint(id, { anchors: "TopCenter" }, hollowCircle);    jsPlumb.addEndpoint(id, { anchors: "BottomCenter" }, hollowCircle);    jsPlumb.draggable(id);    //1.3 注冊實體可draggable和resizable    $("#" + id).draggable({      containment: "parent",      start: function () {        startMove();      },      drag: function (event, ui) {        MoveSelectDiv(event, ui, id);        jsPlumb.repaintEverything();      },      stop: function () {        jsPlumb.repaintEverything();      }    });    $("#" + id).resizable({      resize: function () {        jsPlumb.repaintEverything();      },      stop: function () {        jsPlumb.repaintEverything();        //oInitElement.SendPropRequest("DTO_TM_PLANT", $(this));      }    });    return id;  };

重點來看看這一句:

jsPlumb.addEndpoint(id, { anchors: "RightMiddle" }, hollowCircle);
調用了JsPlumb里面的addEndpoint方法,第一個參數表示頁面標簽的id,第一個表示連線點的位置(RightMiddle、LeftMiddle、TopCenter、BottomCenter四個選項);第三參數表示點的樣式以及連線的樣式。沒調用依次addEndpoint方法,元素上面就會多一個連線的節點。關于hollowCircle里面各個參數的意義,可以查看api。

還有一句多個地方都看到了:

jsPlumb.repaintEverything();
看字面意思大概能知道這句是干什么的,修復所有。當在中間區域拖動元素的時候,如果不帶這一句,節點不會跟著元素一起移動。加上之后節點才會跟隨標簽移動。至此,最基礎的JsPlumb連線就完成了。

以上就是本文的全部內容,希望能夠幫助大家學習掌握流程圖的核心技術JsPlumb。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九九久久久久久| 精品色蜜蜜精品视频在线观看| 久久九九精品99国产精品| 久久99精品视频一区97| 欧美疯狂xxxx大交乱88av| 在线观看亚洲视频| 国产91在线播放精品91| 久久男人av资源网站| 亚洲四色影视在线观看| 国产精品久久久久77777| 亚洲国产精品人人爽夜夜爽| 日韩电影中文 亚洲精品乱码| 欧美成在线视频| 国产精品普通话| 国产综合在线看| 国产综合在线视频| 国内精品久久久久久| 亚洲欧美综合区自拍另类| 欧美激情综合色综合啪啪五月| 亚洲人精选亚洲人成在线| 日韩色av导航| 欧洲成人在线观看| 成人淫片在线看| 国产精品精品久久久久久| 亚洲伦理中文字幕| 欧美黑人一级爽快片淫片高清| 国产精品最新在线观看| 95av在线视频| 粉嫩老牛aⅴ一区二区三区| 久久久久久中文| 最近2019年日本中文免费字幕| 久久精品人人爽| 久久久免费高清电视剧观看| 国产成人精彩在线视频九色| 中文字幕久热精品在线视频| 色诱女教师一区二区三区| 日韩乱码在线视频| 久久国产精品久久久| 久久韩国免费视频| 91po在线观看91精品国产性色| 26uuu另类亚洲欧美日本老年| 久久97精品久久久久久久不卡| 日本欧美精品在线| 欧美在线亚洲在线| 欧美肥婆姓交大片| 亚洲国产日韩一区| 亚洲精品99久久久久中文字幕| 亚洲黄色有码视频| 国产精品一区二区av影院萌芽| 久久久久久亚洲精品中文字幕| 欧美午夜精品久久久久久浪潮| 国产日韩在线亚洲字幕中文| 亚洲欧美日韩国产成人| 26uuu另类亚洲欧美日本老年| 国产一区二区日韩精品欧美精品| 黑人巨大精品欧美一区二区三区| 91精品国产高清久久久久久| 精品国产精品三级精品av网址| 亚洲美女在线观看| 亚洲白拍色综合图区| 国产精品视频在线观看| 久久久精品国产一区二区| 2021久久精品国产99国产精品| 亚洲成人av片在线观看| 国产xxx69麻豆国语对白| 亚洲香蕉伊综合在人在线视看| 久久亚洲影音av资源网| 亚洲精品大尺度| 日韩免费观看av| 亚洲日韩中文字幕在线播放| 国产一区二区视频在线观看| 欧美第一页在线| 欧美成在线观看| 欧美激情xxxxx| 在线视频中文亚洲| 日韩精品一区二区视频| 国产日韩精品一区二区| 日韩免费在线播放| 久久久久国产一区二区三区| 91中文精品字幕在线视频| 国产精品普通话| 日韩欧美国产高清91| 欧美日韩另类在线| 国产乱肥老妇国产一区二| 91国产在线精品| 亚洲性生活视频在线观看| 国产精品久久久久福利| 日韩欧美中文免费| 97人洗澡人人免费公开视频碰碰碰| 91嫩草在线视频| 欧美日韩综合视频| 国产精品丝袜高跟| 亚洲在线观看视频网站| 性欧美激情精品| 久久久久久噜噜噜久久久精品| 91在线播放国产| 黑人巨大精品欧美一区二区一视频| 亚洲欧美日韩国产中文| 亚洲最新av在线网站| 亚洲女人天堂视频| 国产97色在线|日韩| 日韩欧美在线国产| 欧美一级大片在线免费观看| 中文字幕九色91在线| 欧美精品做受xxx性少妇| 国产精品一区二区av影院萌芽| 国产裸体写真av一区二区| 在线观看中文字幕亚洲| 在线成人激情黄色| 国产精品电影久久久久电影网| 欧美激情小视频| 日韩亚洲国产中文字幕| 成人午夜一级二级三级| 久久99精品久久久久久噜噜| 欧美三级欧美成人高清www| 欧美日韩成人黄色| 成人网在线免费观看| 欧美大胆在线视频| 久久久久久久成人| 青草成人免费视频| 国产丝袜一区二区三区| 久久精品电影一区二区| 精品国产电影一区| 色一区av在线| 亚洲男人天堂手机在线| 色综合视频一区中文字幕| 欧美日韩在线视频一区| 欧美在线视频在线播放完整版免费观看| 欧美日韩国产va另类| 亚洲最大在线视频| 久久精品一本久久99精品| 午夜精品久久久99热福利| 欧美亚洲在线观看| 欧美又大又粗又长| 韩剧1988免费观看全集| 神马国产精品影院av| 亚洲国语精品自产拍在线观看| 2019中文字幕在线免费观看| 成人性生交xxxxx网站| 亚洲人高潮女人毛茸茸| 日韩精品欧美国产精品忘忧草| 国产精品一区二区久久久| 日韩视频免费在线| 亚洲精品第一国产综合精品| 中文字幕日韩有码| 久久精品久久久久电影| 久久久中文字幕| 动漫精品一区二区| 韩国三级电影久久久久久| 97婷婷大伊香蕉精品视频| 日本精品性网站在线观看| 精品国产一区久久久| 欧美高清视频在线| 色噜噜国产精品视频一区二区| 久久久久久91香蕉国产| 国产亚洲精品日韩| 91最新在线免费观看| 91九色综合久久| 国产精品久久久久99| 久久久影视精品| www.欧美精品| 亚洲伊人一本大道中文字幕| 国产福利视频一区二区| 中文欧美日本在线资源|