返回顶部
首页 > 资讯 > 前端开发 > JavaScript >jquery.jsPlumb实现拓扑图
  • 682
分享到

jquery.jsPlumb实现拓扑图

2024-04-02 19:04:59 682人浏览 泡泡鱼
摘要

基于Jquery.jsPlumb编写拓扑图,供大家参考,具体内容如下 要求:实现公司组织结构拓扑关系,可展开,可收拢;动态数据展示;叶子节点可点击; 实现办法:   1 国

基于Jquery.jsPlumb编写拓扑图,供大家参考,具体内容如下

要求:实现公司组织结构拓扑关系,可展开,可收拢;动态数据展示;叶子节点可点击;

实现办法:  

1 国内还有一个插件也比较简单,但是该插件只能全部展开,并不能收拢,放弃了该办法;

 2 最后选择了这个插件,因为相关资料很少,所以每步都是自己摸索出来的;

对数据的要求:因为该插件的每个节点都是一个具有独立不同id的div模块,所以JSON数据要求有一个id属性,并且所有的id都要不一样;

实现的原理:  

1 先定位所有的节点(这个还简单点,只要依次遍历数据就行);

2 添加拓扑关系;(这个地方比较复杂,尤其是点击节点时,其他节点收缩,直接点展开,里面的循环量特别大,几乎都是在一个大循环里面套用了很多的子循环)

1 html部分(注意事项,里面的图片自己设置)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
    <script type="text/javascript" src="scripts/jquery-1.7.2.js"></script>
    <script type="text/javascript" src="scripts/jquery.jsPlumb-1.4.0-all.js"></script>
    <script type="text/javascript" src="scripts/test.js"></script>
    <style type="text/CSS">
        .rootnode {
          //  background-color: #79deff;
            width: 36px;
            height: 36px;
            position: absolute;
            background-image: url(images/monitor_server.png);
            background-size: 32px 32px;
            background-repeat: no-repeat;
            background-position:center;
         
        }
        .instanceNode {
          //  background-color: #50d4ff;
            width: 36px;
            height: 36px;
            position: absolute;
            background-image: url(images/instance_big.png);
            background-size: 32px 32px;
            background-repeat: no-repeat;
            background-position:center;
            -moz-background-size: 32px 32px;
            filter: progid:DXImageTransfORM.Microsoft.AlphaimageLoader(src='images/instance_big.png', sizingMethod='scale')\9;
            -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/instance_big.png',sizingMethod='scale')"\9;
            cursor:pointer;
            
        }
        .instanceNode_leaf {
          //  background-color: #50d4ff;
            width: 36px;
            height: 36px;
            position: absolute;
            background-image: url(images/user_online.png);
            background-size: 32px 32px;
            background-repeat: no-repeat;
            background-position:center;
            -moz-background-size: 32px 32px;
            filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/user_online.png', sizingMethod='scale')\9;
            -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/user_online.png',sizingMethod='scale')"\9;
            cursor:pointer;
            
        }
 
        .nodeWord{
            //font-weight: bold;
            font-size: 12px;
            color:white;
            text-align: center;
            position: absolute;
            bottom: -20px;
            width: 100%;
            
        }
        .cursorEndpoint{
            cursor:pointer;
        }
        body{
            background:#27363F;
        }
    </style>
 
</head>
 
<body style="overflow: scroll;">
<div id="top_server" class="rootNode"><div style=""></div></div>
</body>
</html>

2 test.js

var tree_json=[
    {
        "id": "1",
        "text": "国核院",
        "iconCls": "icon-org",
        "state": "closed",
        "children": [
            {
                "id": "2",
                "text": "土木工程部",
                "iconCls": "icon-org",
                "state": "closed",
                "children": [
                    {
                        "id": "3",
                        "text": "科室一",
                        "iconCls": "icon-org",
                        "state": "closed",
                        "children": [
                            {
                                "id": "4",
                                "text": "u110",
                                "iconCls": "icon-man"
                            },
                            {
                                "id": "5",
                                "text": "u120",
                                "iconCls": "icon-man"
                            },
                            {
                                "id": "51",
                                "text": "u120",
                                "iconCls": "icon-man"
                            }
                        ]
                    },
                    {
                        "id": "6",
                        "text": "财务",
                        "iconCls": "icon-org",
                        "state": "closed",
                        "children": [
                            {
                                "id": "7",
                                "text": "u111",
                                "iconCls": "icon-man"
                            },
                             {
                                "id": "71",
                                "text": "u111",
                                "iconCls": "icon-man"
                            }
                        ]
                    }
                ]
            },
            {
                "id": "8",
                "text": "建筑工程部",
                "iconCls": "icon-org",
                "state": "closed",
                "children": [
                    {
                        "id": "9",
                        "text": "科室一",
                        "iconCls": "icon-org",
                        "state": "closed",
                  
                    },
                    {
                        "id": "11",
                        "text": "财务",
                        "iconCls": "icon-org",
                        "state": "closed",
                        "children": [
                            {
                                "id": "12",
                                "text": "u114",
                                "iconCls": "icon-man"
                            }
                        ]
                    }
                ]
            },
            {
                "id": "13",
                "text": "综合室",
                "iconCls": "icon-org",
                "state": "closed",
                "children": [
                    {
                        "id": "14",
                        "text": "u113",
                        "iconCls": "icon-man"
                    },
                    {
                        "id": "141",
                        "text": "u113",
                        "iconCls": "icon-man"
                    }
                ]
            },
            {
                "id": "15",
                "text": "重庆公司",
                "iconCls": "icon-org",
                "state": "closed",
                "children": [
                    {
                        "id": "16",
                        "text": "土木工程部",
                        "iconCls": "icon-org",
                        "state": "closed",
                        "children": [
                            {
                                "id": "17",
                                "text": "科室一",
                                "iconCls": "icon-org",
                                "state": "closed",
                                "children": [
                                    {
                                        "id": "18",
                                        "text": "u115",
                                        "iconCls": "icon-man"
                                    }
                                ]
                            },
                            {
                                "id": "19",
                                "text": "财务",
                                "iconCls": "icon-org",
                                "state": "closed",
                                "children": [
                                    {
                                        "id": "20",
                                        "text": "张文涛",
                                        "iconCls": "icon-man"
                                    }
                                ]
                            }
                        ]
  },
    {
        "id": "21",
        "text": "建筑工程部",
        "iconCls": "icon-org",
        "state": "closed",
         "children": [
                         
            {
               "id": "24",
               "text": "财务",
               "iconCls": "icon-org",
               "state": "closed",
               "children": [
              {
               "id": "25",
              "text": "李小进",
              "iconCls": "icon-man"
               }
            ]
           }
          ]
       }
    ]
  }
 ]
}
];
 
$.ajax({
    url: 'scripts/text.json',
    type: 'GET',
    dataType: 'json',
    data: {},
})
.done(function() {
    console.log("success");
    myjson=tree_json;
    showTopo();
})
.fail(function() {
    console.log("error");
})
.always(function() {
    console.log("complete");
});
 
 
 
function showTopo(){
 
    $("#top_server").css({"left":"50%","top":"5%"});
 
    $(document).on({
        mouseover:function(){$(this).css({"background-color":"#79deff","box-shadow":"#909090 0px 0px 10px",
            "-WEBkit-box-shadow": "#909090 0px 0px 10px","-moz-box-shadow": "#909090 0px 0px 10px"});},
        mouseout:function(){$(this).css({"background-color":"","box-shadow":"",
            "-webkit-box-shadow": "","-moz-box-shadow": ""});},
        click:function(){alert($(this).text());}
    },".instanceNode_leaf");
 
 
             var company=myjson[0]["children"];  //初始化  公司数组
             var companyNumber=company.length;   //
             var company_department_arr=[];         //获取部门数组
             var company_department_sec_arr=[];     //获取科室数组
 
             //元素的摆放 先摆放公司 部门 科室 员工 
             if(tree_json[0].hasOwnProperty("children")){
 
                 elementLocation(company,companyNumber);
             }
             
             //开始定义连线和点击事件
             jsPlumb.ready(function() {
 
                jsPlumb.draggable("top_server");        //定义可拖拽
 
                var hoverPaintStyle = { lineWidth:2,strokeStyle:"#dedede" };  //鼠标经过时线宽度和颜色
 
                jsPlumb.importDefaults({  
                    DraGoptions : { cursor: 'pointer'}, //拖动时鼠标停留在该元素上显示指针,通过css控制  
                    EndpointStyles : { width:10, height:10,cursor: 'pointer'},//连接点的默认颜色  
                    Connector : "Straight", //设置连线为直线  
                    Endpoint : "Rectangle",//连接点的默认形状  
                    Anchor : "Top",//连接点的默认位置  
                    MaxConnections:1000,//同上  
                    ConnectionsDetachable:false,
                    HoverPaintStyle:hoverPaintStyle
                });  
                var defaults = {  
                    paintStyle:{ fillStyle:"#B4B9C5" },//设置连接点的颜色  
                    connectorStyle:{ strokeStyle:"#B4B9C5", lineWidth:2 },//连线颜色、粗细  
                    connector:[ "Flowchart", { stub:[10, 20], gap:5, cornerRadius:2} ],
                    isSource:true,
                    isTarget:true,
                    endpoint:"Blank"
                }; 
 
                var rootnode={
                    endpoint:["Image", { src:"images/sub.png" }],//设置连接点的形状为圆形  
                    paintStyle:{ fillStyle:"#B4B9C5" },//设置连接点的颜色  
                    connectorStyle:{ strokeStyle:"green", lineWidth:2 },//连线颜色、粗细  
                    //connector:["Straight",{gap:5}],
                    connector:[ "Flowchart", { stub:[10, 20], gap:10, cornerRadius:2} ],
                    cssClass:"cursorEndpoint"
                };
            
 
              var s1=jsPlumb.addEndpoint("top_server", {anchor:"Bottom"},rootnode);//根节点设置 
              //添加拓扑关系
              for(var i=0;i<companyNumber;i++){  
                       
                       var company_department=company[i].children;  //四个公司下面的部门
                       jsPlumb.draggable("instance_"+company[i].id);  //设置四个公司可拖拽
                       var s2=jsPlumb.addEndpoint("instance_"+company[i].id,defaults);   //设置四个公司的节点
                       jsPlumb.connect({source:s1, target:s2});                          //连接服务器和是个公司;
                       if(company_department.length>0){
 
                          var s2_root=jsPlumb.addEndpoint("instance_"+company[i].id, {anchor:"Bottom"},rootnode);  //把四个公司设置成根节点
                            //对公司绑定click事件
                            s2_root.bind("click", function(endpoint) { 
                            if(endpoint.getParameter("img")&&endpoint.getParameter("img")=="add"){
                                endpoint.setParameter("img","sub");
                                endpoint.setImage("images/sub.png");
                                for(var k=0;k<endpoint.connections.length;k++){
                                    endpoint.connections[k].setVisible(true);
                                    $("#"+endpoint.connections[k].targetId).show();
 
                                     var oid=endpoint.connections[k].targetId.split("_")[1];
                                 
                                     jsPlumb.show("instance_"+oid,true);
                            
                               
              }
                          
         //隐藏其他部门以及部门下的组织
                               
            for(var m=0;m<company.length;m++){ 
             if(endpoint.elementId!="instance_"+company[m].id){     
               var conn=jsPlumb.select({source:"instance_"+company[m].id});
                 for(var n=0;n<conn.length;n++){
                 $("#"+conn.get(n).targetId).hide();
                  jsPlumb.hide(conn.get(n).targetId,true);
                  var oid=conn.get(n).targetId.split("_")[1];
                                         
 
                  var conn_org=jsPlumb.select({source:"instance_"+oid});
                   for(var n1=0;n1<conn_org.length;n1++)
                   {
                 $("#"+conn_org.get(n1).targetId).hide(); 
                  jsPlumb.hide(conn_org.get(n1).targetId,true);
 
                 var oid_1=conn_org.get(n1).targetId.split("_")[1];  
                 var conn_org_l1=jsPlumb.select({source:"instance_"+oid_1});
                     for(var nn1=0;nn1<conn_org_l1.length;nn1++)
                     {
                         $("#"+conn_org_l1.get(nn1).targetId).hide(); 
                        }
 
                     }
                                               
                                       
                    }
                conn.get(0).endpoints[0].setParameter("img","add");
                conn.get(0).endpoints[0].setImage("images/add.png");
                conn.setVisible(false);
                  }
 
               else
            {
              var company_department_orgnize=company[m].children;
               for(var kk=0;kk<company_department_orgnize.length;kk++)
               {
                  if(company_department_orgnize[kk].hasOwnProperty("children"))
             {
                                               jsPlumb.select({source:"instance_"+company_department_orgnize[kk].id}).setVisible(false);
                                               jsPlumb.select({source:"instance_"+company_department_orgnize[kk].id}).get(0).endpoints[0].setParameter("img","add");
                                               jsPlumb.select({source:"instance_"+company_department_orgnize[kk].id}).get(0).endpoints[0].setImage("images/add.png"); 
                                                
                 }
            }
 
          }
       }
       }else{
         endpoint.setParameter("img","add");
         endpoint.setImage("images/add.png");
         for(var k=0;k<endpoint.connections.length;k++){
          endpoint.connections[k].setVisible(false);
           $("#"+endpoint.connections[k].targetId).hide();
           jsPlumb.hide(endpoint.connections[k].targetId,true);
              var oid=endpoint.connections[k].targetId.split("_")[1];
                               
 
             var conn_org=jsPlumb.select({source:"instance_"+oid});
                  for(var n1=0;n1<conn_org.length;n1++)
                   {
                        $("#"+conn_org.get(n1).targetId).hide(); 
                        jsPlumb.hide(conn_org.get(n1).targetId,true);
 
                        var oid_1=conn_org.get(n1).targetId.split("_")[1];  
                        var conn_org_l1=jsPlumb.select({source:"instance_"+oid_1});
                        for(var nn1=0;nn1<conn_org_l1.length;nn1++)
                        {
                             $("#"+conn_org_l1.get(nn1).targetId).hide(); 
                                                     }
                     }
                                    
              }
            }
             if (window.navigator.userAgent.indexOf('MSIE') > -1) {  
                                jsPlumb.repaintEverything();
                            }
                        });
                            
  //添加部门拓扑关系,也就是连接公司到部门,遍历部门
    for(var i1=0;i1<company_department.length;i1++)
          {
         var company_department_orgnize=company_department[i1].children;  //四个公司下面的部门的组织
 
        jsPlumb.draggable("instance_"+company_department[i1].id);  //设置部门可拖拽
        var s3=jsPlumb.addEndpoint("instance_"+company_department[i1].id,defaults);   //设置部门的节点
        jsPlumb.connect({source:s2_root, target:s3});   //连接四个公司到部门
           company_department_arr.push(company_department[i1]);
           if(company_department[i1].hasOwnProperty("children")){ 
 
           var s3_root=jsPlumb.addEndpoint("instance_"+company_department[i1].id, {anchor:"Bottom"},rootnode);  //把部门设置成根节点
          //对部门绑定click事件
            s3_root.bind("click", function(endpoint) { 
             if(endpoint.getParameter("img")&&endpoint.getParameter("img")=="add"){
               endpoint.setParameter("img","sub");
               endpoint.setImage("images/sub.png");
               for(var k1=0;k1<endpoint.connections.length;k1++){ 
                    endpoint.connections[k1].setVisible(true);
                      $("#"+endpoint.connections[k1].targetId).show();
 
                      var oid1=endpoint.connections[k1].targetId.split("_")[1]; 
 
                      jsPlumb.show("instance_"+oid1,true);
                            
                      $("#instance_"+oid1).show(); 
 
 
                                    
 }
    //隐藏其他部门下的科室
                                          
     for(var mm=0;mm<company_department_arr.length;mm++){ 
       if(endpoint.elementId!="instance_"+company_department_arr[mm].id){ 
          var conn_org1=jsPlumb.select({source:"instance_"+company_department_arr[mm].id});
 
             if(company_department_arr[mm].hasOwnProperty("children"))
                {
 
               for(var nn=0;nn<conn_org1.length;nn++){
                  $("#"+conn_org1.get(nn).targetId).hide();
                  jsPlumb.hide(conn_org1.get(nn).targetId,true);
                  var oid_s=conn_org1.get(nn).targetId.split("_")[1];
 
                 var conn_org_l2=jsPlumb.select({source:"instance_"+oid_s}); 
                  for(var nnn1=0;nnn1<conn_org_l2.length;nnn1++)
                       {   
                       $("#"+conn_org_l2.get(nnn1).targetId).hide();
 
                       jsPlumb.hide(conn_org_l2.get(nnn1).targetId,true);
 
 
                      var oid_11=conn_org_l2.get(nnn1).targetId.split("_")[1];  
                      var conn_org_l11=jsPlumb.select({source:"instance_"+oid_11});
                      for(var nnn2=0;nnn2<conn_org_l11.length;nnn2++)
                           { 
                              $("#"+conn_org_l11.get(nnn2).targetId).hide(); 
                         }
 
 
               }
 
                                    
      }
 
         conn_org1.get(0).endpoints[0].setParameter("img","add");
         conn_org1.get(0).endpoints[0].setImage("images/add.png");
         conn_org1.setVisible(false);
                 }
     }
 
       else
      {   
           var company_department_orgnize_sec=company_department_arr[mm].children;
           for(var kkk=0;kkk<company_department_orgnize_sec.length;kkk++)
                  {
                     if(company_department_orgnize_sec[kkk].hasOwnProperty("children"))
                    {
                                               jsPlumb.select({source:"instance_"+company_department_orgnize_sec[kkk].id}).setVisible(false);                                  jsPlumb.select({source:"instance_"+company_department_orgnize_sec[kkk].id}).get(0).endpoints[0].setParameter("img","add");           jsPlumb.select({source:"instance_"+company_department_orgnize_sec[kkk].id}).get(0).endpoints[0].setImage("images/add.png"); 
                                                
                                            }
                                        }
                                    }
                                }
         }else{
          endpoint.setParameter("img","add"); 
          endpoint.setImage("images/add.png");
           for(var k1=0;k1<endpoint.connections.length;k1++){
             endpoint.connections[k1].setVisible(false);
            $("#"+endpoint.connections[k1].targetId).hide();
            jsPlumb.hide(endpoint.connections[k1].targetId,true);
            var oidss=endpoint.connections[k1].targetId.split("_")[1];
 
           var conn_org_l2=jsPlumb.select({source:"instance_"+oidss});
             for(var nnn1=0;nnn1<conn_org_l2.length;nnn1++)
                     {
                      $("#"+conn_org_l2.get(nnn1).targetId).hide();
 
                     jsPlumb.hide(conn_org_l2.get(nnn1).targetId,true);
 
 
                      var oid_11=conn_org_l2.get(nnn1).targetId.split("_")[1];  
                      var conn_org_l11=jsPlumb.select({source:"instance_"+oid_11});
                       for(var nnn2=0;nnn2<conn_org_l11.length;nnn2++)
                          {
                         $("#"+conn_org_l11.get(nnn2).targetId).hide(); 
                        }
 
 
                } 
 
                                }
                            }
                            if (window.navigator.userAgent.indexOf('MSIE') > -1) {
                                jsPlumb.repaintEverything();
                            }
                        });
                            
 
                             //添加科室拓扑关系,也就是连接部门到科室;
                            for(var i2=0;i2<company_department_orgnize.length;i2++)
                            {
                                var staff=company_department_orgnize[i2].children;  //组织下面的个人
                                jsPlumb.draggable("instance_"+company_department_orgnize[i2].id);  //设置组织可拖拽
                               
                                var s4=jsPlumb.addEndpoint("instance_"+company_department_orgnize[i2].id,defaults);   //设置组织的节点
                                         
                                jsPlumb.connect({source:s3_root, target:s4});                                         //连接连接部门到组织
 
                                company_department_sec_arr.push(company_department_orgnize[i2]);
                                if(company_department_orgnize[i2].hasOwnProperty("children"))
                                {
                                   var s4_root=jsPlumb.addEndpoint("instance_"+company_department_orgnize[i2].id, {anchor:"Bottom"},rootnode);  //把组织设置成根节点
                               //绑定科室点击事件
                                s4_root.bind("click", function(endpoint) { 
                            if(endpoint.getParameter("img")&&endpoint.getParameter("img")=="add"){
                                endpoint.setParameter("img","sub");
                                endpoint.setImage("images/sub.png");
                                for(var k2=0;k2<endpoint.connections.length;k2++){ 
                                    endpoint.connections[k2].setVisible(true);
                     $("#"+endpoint.connections[k2].targetId).show();
                                  
             }
   //隐藏其他科室下的人
        for(var mmm=0;mmm<company_department_sec_arr.length;mmm++){ 
               if(endpoint.elementId!="instance_"+company_department_sec_arr[mmm].id){
               var conn_org_2=jsPlumb.select({source:"instance_"+company_department_sec_arr[mmm].id});
 
              if(company_department_sec_arr[mmm].hasOwnProperty("children"))
                 {
                    for(var nn1=0;nn1<conn_org_2.length;nn1++){
                    $("#"+conn_org_2.get(nn1).targetId).hide();
                     jsPlumb.hide(conn_org_2.get(nn1).targetId,true);
                    //var oid=conn_org_2.get(nn1).targetId.split("_")[1]; 
                                         
 
                                        }
 
                conn_org_2.get(0).endpoints[0].setParameter("img","add");
                conn_org_2.get(0).endpoints[0].setImage("images/add.png");
                conn_org_2.setVisible(false);
                   }
        }
      }
   }else{
            endpoint.setParameter("img","add");
            endpoint.setImage("images/add.png");
                 for(var k2=0;k2<endpoint.connections.length;k2++){
                    endpoint.connections[k2].setVisible(false);
                    $("#"+endpoint.connections[k2].targetId).hide();
                    jsPlumb.hide(endpoint.connections[k2].targetId,true);
                     var oid=endpoint.connections[k2].targetId.split("_")[1];
                     //$("div[id*=_"+oid+"_]").hide();
                                }
                            }
                            if (window.navigator.userAgent.indexOf('MSIE') > -1) {
                                jsPlumb.repaintEverything();
                            }
                        });
                               
         for(var i3=0;i3<staff.length;i3++)
               {
                  //var staff=company_department_orgnize[i2].children;  //组织下面的个人
                  jsPlumb.draggable("instance_"+staff[i3].id);  //设置组织可拖拽
                  var s5=jsPlumb.addEndpoint("instance_"+staff[i3].id,defaults);   //设置组织的节点
                  jsPlumb.connect({source:s4_root, target:s5});   //连接连接部门到组织
 
                                    }
                                }
                            }
                   
                         } 

 
                        }
                   
                      }

 
              }
 
s1.bind("click", function(endpoint) {
    if(endpoint.getParameter("img")&&endpoint.getParameter("img")=="add"){
            endpoint.setParameter("img","sub");
            endpoint.setImage("images/sub.png");
             jsPlumb.select({source:"top_server"}).setVisible(true); 
               for(var i=0;i<company.length;i++){
                            jsPlumb.show("instance_"+company[i].id,true);
                            $("#instance_"+company[i].id).show();
                            var company_department=company[i].children; //alert(company[i].id); 
                            if(company_department.length>0){
                                jsPlumb.select({source:"instance_"+company[i].id}).setVisible(false);
                                jsPlumb.select({source:"instance_"+company[i].id}).get(0).endpoints[0].setParameter("img","add");
                                jsPlumb.select({source:"instance_"+company[i].id}).get(0).endpoints[0].setImage("images/add.png");
                            }
                        }
                        
                    }else{
            endpoint.setParameter("img","add");
            endpoint.setImage("images/add.png");
               jsPlumb.hide("top_server");
               for(var i=0;i<company.length;i++){
                  var company_department=company[i].children;
                  jsPlumb.hide("instance_"+company[i].id,true);
                  for(var j=0;j<company_department.length;j++){
                       jsPlumb.hide("instance_"+company_department[j].id,true);
                       if(company_department[j].hasOwnProperty("children"))
                           {
                                    var orgnize=company_department[j].children;
                                     for(var j1=0;j1<orgnize.length;j1++)
                                    {
                                      jsPlumb.hide("instance_"+orgnize[j1].id,true);
                                    }
                                }
                                
 
                            }
                        }
                        $(".nodeWord").parent().hide();
                    }
                    if (window.navigator.userAgent.indexOf('MSIE') > -1) {
                        jsPlumb.repaintEverything();
                    }
                });
     
 
                 
                
 
                  $(window).resize(function(){
                    jsPlumb.repaintEverything();
                });
 
             
            
             });
}
 
 

function elementLocation(nodeArr,nodeNumber){
    if(nodeNumber%2==1){//总节点数是奇数
        
            //var num=parseInt(nodeNumber/2);
            for(var i=0;i<nodeArr.length;i++){  
 
           if(i<parseInt(nodeNumber/2)){
                leftLoc=50-10*(i+1);
            
            }else if(i>parseInt(nodeNumber/2)){ 
                
                    leftLoc=50+10*(i-parseInt(nodeNumber/2)); 
                
            }else{
            
                    leftLoc=50;
                
            }
 
                if(nodeArr[i].hasOwnProperty("children")){
 
                    var html="<div id='instance_"+nodeArr[i].id+"' class=\"instanceNode\" style='top:20%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+nodeArr[i].text+"</div></div>";
                $("body").append(html);
 
                var companyLoc=leftLoc;  //在本例中表示公司横向定位,做这个是方便公司下面的部门定位;
                var companyDepartArr=nodeArr[i].children;
                var companyDepartArrLength=companyDepartArr.length;
                    companyDepartLocation(companyLoc,companyDepartArr,companyDepartArrLength);  //部门定位
 
                }
 
                else{
                    var html="<div id='instance_"+nodeArr[i].id+"' class=\"instanceNode_leaf\" style='top:20%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+nodeArr[i].text+"</div></div>";
                $("body").append(html);
                }
                
            }
        
        
    }else if(nodeNumber%2==0){//总节点数是偶数
    
            //var num=parseInt(nodeNumber/2);
            for(var i=0;i<nodeArr.length;i++){
 
                    if(i+1<=parseInt(nodeNumber/2)){ 
                leftLoc=50-5-10*i; 
            
            }
            else if(i+1>parseInt(nodeNumber/2)){ 
                
                    leftLoc=50+5+10*(i-parseInt(nodeNumber/2));
                
            }
 
                if(nodeArr[i].hasOwnProperty("children")){
                    var html="<div id='instance_"+nodeArr[i].id+"' class=\"instanceNode\" style='top:20%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+nodeArr[i].text+"</div></div>";
                $("body").append(html);
                var companyLoc = leftLoc;
                var companyDepartArr=nodeArr[i].children;
                var companyDepartArrLength=companyDepartArr.length;
                    companyDepartLocation(companyLoc,companyDepartArr,companyDepartArrLength);  //部门定位
                }
                else
                {
                    var html="<div id='instance_"+nodeArr[i].id+"' class=\"instanceNode_leaf\" style='top:20%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+nodeArr[i].text+"</div></div>";
                $("body").append(html);
                }
                
            }
        
        
    }
}
 
//部门定位
function companyDepartLocation(nodeLoc,nodeArr,nodeNumber){
    if(nodeNumber%2==1){
        for(var j=0;j<nodeNumber;j++){
            var department=nodeArr[j],leftLoc;
            if(j<parseInt(nodeNumber/2)){
                leftLoc=nodeLoc-5*(j+1);
            
            }
            else if(j>parseInt(nodeNumber/2)){
                
                    leftLoc=nodeLoc+5*j;
                
            }
            else{
                
            
                    leftLoc=nodeLoc;
                
            }
 
 
            if(department.hasOwnProperty("children")){
 
                var html="<div id='instance_"+department.id+"' class='instanceNode' style='top:40%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+department.text+"</div></div>";
                $("body").append(html);
                var departmentOrgnize=department.children;
                var departmentOrgnizeLength=departmentOrgnize.length;
                var departmentOrgnizeLoc=leftLoc;
                 departmentOrgnizeLocation(departmentOrgnizeLoc,departmentOrgnize,departmentOrgnizeLength);  //组织定位
            }
 
            else{
 
                var html="<div id='instance_"+department.id+"' class='instanceNode_leaf' style='top:40%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+department.text+"</div></div>";
                $("body").append(html);
 
            }
            
 
          
 
        }
    }else if(nodeNumber%2==0){ 
 
        for(var j=0;j<nodeNumber;j++){
 
            var department=nodeArr[j],leftLoc;
 
            if(j+1<=parseInt(nodeNumber/2)){ 
                leftLoc=nodeLoc-5-5*j; 
            
            }
            else if(j+1>parseInt(nodeNumber/2)){ 
                
                    leftLoc=nodeLoc+5+5*(j-parseInt(nodeNumber/2));
                
            }
 
            if(department.hasOwnProperty("children")){
 
 
            var html="<div id='instance_"+department.id+"' class='instanceNode' style='top:40%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+department.text+"</div></div>";
                  $("body").append(html);
 
                   var departmentOrgnize=department.children;
                   var departmentOrgnizeLength=departmentOrgnize.length;
                   var departmentOrgnizeLoc=leftLoc;  
                   departmentOrgnizeLocation(departmentOrgnizeLoc,departmentOrgnize,departmentOrgnizeLength);  //组织定位
                  
 
            }
 
            else
            {
                var html="<div id='instance_"+department.id+"' class='instanceNode_leaf' style='top:40%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+department.text+"</div></div>";
                  $("body").append(html);
 
            }
 
 
        }
    }
}
 
//组织定位
function departmentOrgnizeLocation(nodeLoc,nodeArr,nodeNumber){ 
 
            if(nodeNumber%2==1){
        
        for(var j=0;j<nodeNumber;j++){
            var orgnize=nodeArr[j],leftLoc;
            if(j<parseInt(nodeNumber/2)){
                leftLoc=nodeLoc-5*(j+1);
            
            }else if(j>parseInt(nodeNumber/2)){
                
                    leftLoc=nodeLoc+5*(j-parseInt(nodeNumber/2));
                
            }else{
            
                    leftLoc=nodeLoc;
                
            }
 
            if(orgnize.hasOwnProperty("children")){
                var html="<div id='instance_"+orgnize.id+"' class='instanceNode' style='top:60%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+orgnize.text+"</div></div>";
                $("body").append(html);
 
                   var staffArr=orgnize.children;
                   var staffLength=staffArr.length;  
                   var staffLoc=leftLoc; 
                   staffLocation(staffLoc,staffArr,staffLength);  //员工定位
 
 
            }
 
            else
            {
                var html="<div id='instance_"+orgnize.id+"' class='instanceNode_leaf' style='top:60%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+orgnize.text+"</div></div>";
                $("body").append(html);
            }
            
 
 
        }
    }
 
    else if(nodeNumber%2==0){ 
    
        for(var j=0;j<nodeNumber;j++){
            var orgnize=nodeArr[j],leftLoc;
            if(j+1<=parseInt(nodeNumber/2)){
                leftLoc=nodeLoc-5-5*j; 
                
            }else if(j+1>parseInt(nodeNumber/2)){
                
                    leftLoc=nodeLoc+5+5*(j-parseInt(nodeNumber/2));
                
            }
 
            if(orgnize.hasOwnProperty("children")){ 
            var html="<div id='instance_"+orgnize.id+"' class='instanceNode' style='top:60%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+orgnize.text+"</div></div>";
                  $("body").append(html);
 
                   var staffArr=orgnize.children;
                   var staffLength=staffArr.length;  
                   var staffLoc=leftLoc; 
                       staffLocation(staffLoc,staffArr,staffLength);  //员工定位
              }
 
              else
              {
                  var html="<div id='instance_"+orgnize.id+"' class='instanceNode_leaf' style='top:60%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+orgnize.text+"</div></div>";
                  $("body").append(html);
              }
 
             
        }
    }
 
}
 
//员工定位
function staffLocation(nodeLoc,nodeArr,nodeNumber){ 
 
      if(nodeNumber%2==1){ 
        
        for(var j=0;j<nodeNumber;j++){
            var staff=nodeArr[j],leftLoc;
            if(j<parseInt(nodeNumber/2)){
                leftLoc=nodeLoc-5*(j+1);
            
            }else if(j>parseInt(nodeNumber/2)){
                
                    leftLoc=nodeLoc+5*(j-parseInt(nodeNumber/2));  
                
            }else{
            
                    leftLoc=nodeLoc;
                
            }
 
            if(staff.hasOwnProperty("children")){
                var html="<div id='instance_"+staff.id+"' class='instanceNode' style='top:80%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+staff.text+"</div></div>";
                $("body").append(html);
 
           
 
 
            }
 
            else
            {
                var html="<div id='instance_"+staff.id+"' class='instanceNode_leaf' style='top:80%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+staff.text+"</div></div>";
                $("body").append(html);
            }
            
 
 
        }
    }
 
    else if(nodeNumber%2==0){ 
    
        for(var j=0;j<nodeNumber;j++){
            var staff=nodeArr[j],leftLoc;
            if(j+1<=parseInt(nodeNumber/2)){
                leftLoc=nodeLoc-5-5*j; 
                
            }else if(j+1>parseInt(nodeNumber/2)){
                
                    leftLoc=nodeLoc+5+5*(j-parseInt(nodeNumber/2));
                
            }
 
            if(staff.hasOwnProperty("children")){
            var html="<div id='instance_"+staff.id+"' class='instanceNode' style='top:80%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+staff.text+"</div></div>";
                  $("body").append(html);
 
              }
 
              else
              {
                  var html="<div id='instance_"+staff.id+"' class='instanceNode_leaf' style='top:80%;left:"+parseInt(leftLoc)+"%'><div class='nodeWord'>"+staff.text+"</div></div>";
                  $("body").append(html);
              }
 
             
        }
    }
 
 
}

3、最后的效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: jquery.jsPlumb实现拓扑图

本文链接: https://lsjlt.com/news/144541.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • jquery.jsPlumb实现拓扑图
    基于jquery.jsPlumb编写拓扑图,供大家参考,具体内容如下 要求:实现公司组织结构拓扑关系,可展开,可收拢;动态数据展示;叶子节点可点击; 实现办法:   1 国...
    99+
    2024-04-02
  • Java如何实现拓扑排序
    今天小编给大家分享一下Java如何实现拓扑排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。铺垫有向图:我们这节要讲的算法涉...
    99+
    2023-06-30
  • vue用vis插件如何实现网络拓扑图
    目录vis插件实现网络拓扑图安装引入visvis使用示例vis官方文档vis.js网络拓扑图点击折叠节点和展开节点首先看一下效果图vis插件实现网络拓扑图 安装引入vis 1.npm...
    99+
    2024-04-02
  • 拓扑排序Python实现的过程
    目录有向无环图拓扑排序算法步骤代码实现总结有向无环图 拓扑排序是针对有向无环图(DAG, Directed Acyclic Graph)的 具有以下性质: 如果这个图不是 DAG,那...
    99+
    2023-01-31
    拓扑排序Python 拓扑排序 Python拓扑排序
  • EIGRP实验 3 :EIGRP 拓扑、
    EIGRP实验 3 :EIGRP 拓扑、路由以及汇聚实验目的:通过对EIGRP实验拓扑,路由以及汇聚相关实验的的练习,掌握EIGRP建立拓扑信息的方式,度量计算方法,如何调整度量值,非等价负载均衡,以及EIGRP末节路由器。实验拓扑:实验步...
    99+
    2023-01-31
    拓扑 EIGRP
  • 怎么应用html5实现网络拓扑图上文本
    本篇内容主要讲解“怎么应用html5实现网络拓扑图上文本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么应用html5实现网络拓扑图上文本”吧!从上图可以看出...
    99+
    2024-04-02
  • 详解C++实现拓扑排序算法
    目录一、拓扑排序的介绍二、拓扑排序的实现步骤三、拓扑排序示例手动实现四、拓扑排序的代码实现五、完整的代码和输出展示一、拓扑排序的介绍 拓扑排序对应施工的流程图具有特别重要的作用,它可...
    99+
    2024-04-02
  • 详解Java实现拓扑排序算法
    目录一、介绍二、拓扑排序算法分析三、拓扑排序代码实现一、介绍 百科上这么定义的: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中...
    99+
    2024-04-02
  • C++图的拓扑排序是什么
    本文小编为大家详细介绍“C++图的拓扑排序是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++图的拓扑排序是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、前言且该序列必须满足下面两个条件:每个顶点...
    99+
    2023-06-30
  • Java实现拓扑排序的示例代码
    目录铺垫简介工作过程数据结构拓扑排序测试样例1测试样例2总结铺垫 有向图:我们这节要讲的算法涉及到有向图,所以我先把有向图的一些概念说一下,文章后面就不做解释啦。首先有向图节点与节点...
    99+
    2024-04-02
  • C++详细讲解图的拓扑排序
    目录一、前言二、算法流程三、有向图的拓扑排序一、前言 且该序列必须满足下面两个条件: 每个顶点出现且只出现一次。若存在一条从顶点 x到顶点 y的路径,那么在序列中顶点 x 出现在顶点...
    99+
    2024-04-02
  • HTML5 中怎么实现一个3D网络拓扑树
    这篇文章给大家介绍 HTML5 中怎么实现一个3D网络拓扑树,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 创建一个树状结构有了解过HT for Web的朋友,对树状结构数据的创建应该都不陌生,在这里我就不做深入的探讨...
    99+
    2023-06-17
  • Java实现拓扑排序算法的示例代码
    目录拓扑排序原理1.点睛2.拓扑排序3.算法步骤4.图解拓扑排序算法实现1.拓扑图2.实现代码3.测试拓扑排序原理 1.点睛 一个无环的有向图被称为有向无环图。有向无环图是描述一个工...
    99+
    2024-04-02
  • 如何开发基 HTML5网络拓扑图的应用
    这篇文章主要介绍如何开发基 HTML5网络拓扑图的应用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!今天开始我们就从最基础解析如何构建 HTML5 Canvas 拓扑图应用,HT 内部封装了一个拓扑图形组件 ht.g...
    99+
    2023-06-09
  • ENSP安装以及简单配置一个拓扑图
    ENSP学习心得 eNSP软件安装    安装eNSP之前必须先安装以下三个插件: VirtualBoxWinPcapWireshack eNSP作为模拟器主体,需要对应版本的VirtualBox和WinPcap提供虚拟环境,Wiresha...
    99+
    2023-09-21
    网络 运维 服务器
  • C/C++浅析邻接表拓扑排序算法的实现
    目录前言一、拓扑排序算法的思路二、实现步骤1.求个顶点的入度2.拓扑排序的实现三、测试结果总结前言 在软件开发、施工过程、教学安排等等的一系列活动中,往往需要一个有向无环图来表示其是...
    99+
    2024-04-02
  • Cacti系统如何处理网络拓扑图的展示
    Cacti系统通过使用SNMP协议来监控网络设备,获取设备的各种性能数据,并根据这些数据生成网络拓扑图。在Cacti系统中,用户可以...
    99+
    2024-04-02
  • 如何使用HTML5中Canvas创建电信网络拓扑图
    小编给大家分享一下如何使用HTML5中Canvas创建电信网络拓扑图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果图http://www.hightopo.c...
    99+
    2023-06-09
  • Java数据结构之有向图的拓扑排序详解
    目录前言拓扑排序介绍检测有向图中的环实现思路API设计代码实现基于深度优先的顶点排序实现思路API设计代码实现拓扑排序API设计代码实现测试验证前言 在现实生活中,我们经常会同一时间...
    99+
    2022-11-13
    Java有向图 拓扑排序 Java 有向图 Java 拓扑排序
  • 中小型超市的网络规划与设计(完整文档+思科拓扑图)
    大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了...
    99+
    2023-10-26
    网络 安全 计算机网络 网络协议 云计算
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作