欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2015年12月08日 10:28:17   作者:懶得安分  
這篇文章主要介紹了js中構造流程圖的核心技術JsPlumb,jsPlumb是一個強大的JavaScript連線庫,它可以將html中的元素用箭頭、曲線、直線等連接起來,適用于開發(fā)Web上的圖表、建模工具等,需要的朋友可以參考下

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

一、效果圖展示

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

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

3、鼠標拖動區(qū)域選中元素,并且選中元素統(tǒng)一拖動位置。

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

5、對選中元素居中對齊

6、右對齊

7、上對齊

8、垂直居中對齊

9、下對齊

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

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

12、根據(jù)第一個選中的元素同高

13、根據(jù)第一個選中的元素同寬

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

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

16、選中統(tǒng)一刪除元素以及元素上面的連線

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

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

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

2、使用
(1)引入JS文件
可以直接去官網(wǎng)上面下載最新的js庫,由于JsPlumb需要JQuery的支持,按照網(wǎng)上的說法,它只兼容jQuery1.3.x及以上版本,并在jQuery UI 1.7.x、1.8.x及1.9.x上測試通過。所以我們需要下載較高一點版本的JQuery和JQuery UI。關于JsPlumb的內(nèi)容只需要引用一個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的連線的樣式是由點確定的,也就是說點的樣式里面包含了相關的屬性來說明當使用此點來連線的時候,連線的樣式應該是什么樣的。
在我們項目里面,左邊的模型區(qū)域,中間才是設計區(qū)域。那么要將一個元素從模型區(qū)域創(chuàng)建出來,就要用到我們JQuery UI里面的draggable和droppable事件。首先我們注冊左邊模型的draggable和中間區(qū)域的droppable事件。

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

<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(){
        //左邊區(qū)域的draggable事件
        $("#divContentLeftMenu .node").draggable({
          helper: "clone",
          scope: "plant"
        });

        //中間拖拽區(qū)的drop事件
        $("#divCenter").droppable({
          scope: "plant",
          drop: function (event, ui) {
            // 創(chuàng)建工廠模型到拖拽區(qū)
            CreateModel(ui, $(this));
          }
        });
        });  
 
//1.創(chuàng)建模型(參數(shù)依次為: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);
調(diào)用了JsPlumb里面的addEndpoint方法,第一個參數(shù)表示頁面標簽的id,第一個表示連線點的位置(RightMiddle、LeftMiddle、TopCenter、BottomCenter四個選項);第三參數(shù)表示點的樣式以及連線的樣式。沒調(diào)用依次addEndpoint方法,元素上面就會多一個連線的節(jié)點。關于hollowCircle里面各個參數(shù)的意義,可以查看api。

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

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

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

相關文章

  • Bootstrap基本樣式學習筆記之表單(3)

    Bootstrap基本樣式學習筆記之表單(3)

    這篇文章主要介紹了Bootstrap學習筆記之表單基本樣式的相關資料,為大家分享了三種表單樣式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JavaScript動態(tài)插入CSS的方法

    JavaScript動態(tài)插入CSS的方法

    這篇文章主要介紹了JavaScript動態(tài)插入CSS的方法,兩個步驟就可以實現(xiàn)JavaScript動態(tài)插入CSS
    2015-12-12
  • 微信小程序?qū)崿F(xiàn)分頁加載效果

    微信小程序?qū)崿F(xiàn)分頁加載效果

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)分頁加載效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • elementui上傳圖片回顯功能實現(xiàn)

    elementui上傳圖片回顯功能實現(xiàn)

    這篇文章主要介紹了elementui上傳圖片回顯,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • JavaScript數(shù)組的定義及數(shù)字操作技巧

    JavaScript數(shù)組的定義及數(shù)字操作技巧

    這篇文章主要介紹了JavaScript數(shù)組的定義及數(shù)字操作技巧的相關資料,需要的朋友可以參考下
    2016-06-06
  • 詳解JavaScript數(shù)組的常用方法

    詳解JavaScript數(shù)組的常用方法

    這篇文章主要為大家介紹了JavaScript數(shù)組的常用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • Bootstrap3制作搜索框樣式的方法

    Bootstrap3制作搜索框樣式的方法

    這篇文章主要介紹了Bootstrap3制作搜索框樣式的方法 的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • js實現(xiàn)按鈕加背景圖片常用方法

    js實現(xiàn)按鈕加背景圖片常用方法

    這篇文章主要介紹了js實現(xiàn)按鈕加背景圖片常用方法,羅列了js事件觸發(fā)控制背景圖片、css樣式控制以及圖片按鈕三種方法,非常具有實用價值,需要的朋友可以參考下
    2014-11-11
  • js獲取微信版本號的方法

    js獲取微信版本號的方法

    本文給大家分享的是使用javascript實現(xiàn)判斷微信版本號以及判斷是否在內(nèi)置的微信瀏覽器中打開的代碼,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-05-05
  • xml和web特殊字符

    xml和web特殊字符

    在html和xml文件中,往往會因為以下特殊字符而導致文件解析出錯,一般通過以下函數(shù)來處理。
    2009-04-04

最新評論