html5图形库fabric.js实现二叉树

html5图形库fabric.js实现二叉树



<!DOCTYPE html>
<html lang="en" ng-app="">
  <head>
    <meta charset="utf-8">

    <title>node</title>
 
    <style>
	  body {
		position:absolute;  
	  }
      pre { margin-left: 15px !important } 
	  #pop{
		  position:absolute;
		  left:0px;
		  top :0px;
		  width:200px;
		  height:280px;
 
		  border-radius:10px;
		  border:solid 5px #333;
		  padding:10px;
		  font-size:10px;
		  background:#999;
		  overflow:hidden;
		  display:none;
		  z-index:100;
	  }
	  table{
		  width:100%;
		  height:100%;  
	  }
	   table tr td:nth-child(1){
		  width:50%;
		   
	  }
	  table tr td:nth-child(2){
		  font-weight:bold;
		  color:#F00;  
	  }
 
	  b {
		  color:#F00  ;
	  }
    </style>   
    <script src="fabric.js"></script>
   
    
  </head>
  <body> 
     
    <canvas id="c" width="3440" height="800" style="border:1px solid #ccc"></canvas> 
     
    <div id="pop"> 
    	<table>
        	<tr>
            	<td>res_no:</td>
                <td><span id="p1"></span></td>
            </tr>
            <tr>
            	<td>res_type:</td>
                <td><span id="p2"></span></td>
            </tr>
            <tr>
            	<td>parent_element:</td>
                <td><span id="p3"></span></td>
            </tr>
            <tr>
            	<td>left_p:</td>
                <td><span id="p4"></span></td>
            </tr>
            <tr>
            	<td>rigth_p:</td>
                <td><span id="p5"></span></td>
            </tr>
            <tr>
            	<td>left_s:</td>
                <td><span id="p6"></span></td>
            </tr>
            <tr>
            	<td>right_s:</td>
                <td><span id="p7"></span></td>
            </tr>
            <tr>
            	<td>child_s:</td>
                <td><span id="p8"></span></td>
            </tr>
            <tr>
            	<td>bmlm_base:</td>
                <td><span id="p9"></span></td>
            </tr>
            <tr>
            	<td>level:</td>
                <td><span id="p10"></span></td>
            </tr>
        </table> 
    </div>


<script id="main">
		(function (){
			 
		  var canvas = this.__canvas = new fabric.canvas('c', { selection: false }),
		  	  mouseX ,mouseY; //鼠标位置
		  	  canvas.isDrawingMode = false;
		  fabric.Object.prototype.originX = fabric.Object.prototype.originY = 'center';
		  //fabric.Object.prototype.originX = 1920;
		  //fabric.Object.prototype.originY = 100;
		  
		  
		  var res_no = {};
		  var nodeArr =  [
				 //第一层
				 {
			 
					res_no : 1001,      //资源号
					res_type:'S',       //资源类型
					parent_element:null,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数
						
					parentId:null ,
					selfId :1 
				},
				//第二层
				{
	 
					res_no : 1002,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数
						
					parentId:1,
					selfId :2,
					
				},
				//第二层
				 {
	 
					res_no : 1003,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:1,
					selfId :3 
				},
				//第三层
				 {
 
					res_no : 1004,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:2,
					selfId :4
				},
				//第三层
				 {
 
					res_no : 1005,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:2,
					selfId :5
				} ,
				
				//第三层
				{
 
					res_no : 1006,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:3,
					selfId :6
				} ,
				//第三层
				{
 
					res_no : 1007,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:3,
					selfId :7
				} ,
				//第四层
				{
 
					res_no : 1008,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:4,
					selfId :8
				} ,
				{
 
					res_no : 1009,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:4,
					selfId :9
				} ,
				{
 
					res_no : 1010,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:6,
					selfId :10
				} ,
				
				{
 
					res_no : 1011,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:7,
					selfId :11
				} ,
				
				//第五层
				{
 
					res_no : 1012,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:9,
					selfId :12
				} ,
				{
					res_no : 1013,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:9,
					selfId :13
				} ,
				
				{
					res_no : 1014,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:11,
					selfId :14
				} ,				
				{
 
					res_no : 1015,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:11,
					selfId :15
				} ,
				
				{
 
					res_no : 1016,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:14,
					selfId :16
				} ,
				{
 
					res_no : 1017,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:14,
					selfId :17
				} ,
				
				
				{
 
					res_no : 1018,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:15,
					selfId :18
				} ,
				{
 
					res_no : 1019,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:15,
					selfId :19
				} ,
				
				{
 
					res_no : 1020,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:16,
					selfId :20
				} ,
				{
 
					res_no : 1021,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:16,
					selfId :21
				} ,
				
				
				{
 
					res_no : 1022,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:17,
					selfId :22
				} ,
				{
 
					res_no : 1023,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:17,
					selfId :23
				} ,
				
				
				
				{
 
					res_no : 1024,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:18,
					selfId :24
				} ,
				{
 
					res_no : 1025,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:18,
					selfId :25
				} ,
				
				{
 
					res_no : 1026,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:19,
					selfId :26
				} ,
				{
 
					res_no : 1027,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:19,
					selfId :27
				} ,
				
				
				{
 
					res_no : 1028,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:7,
					selfId :28
				} ,
				{
 
					res_no : 1029,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:28,
					selfId :29
				} ,
				
				{
 
					res_no : 1030,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:28,
					selfId :30
				} ,
				
				{
 
					res_no : 1031,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:29,
					selfId :31
				} ,
				
				{
 
					res_no : 1032,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:30,
					selfId :33
				} ,
				{
 
					res_no : 1033,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:30,
					selfId :34
				} ,
				
				{
 
					res_no : 1034,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:29,
					selfId :32
				} ,
				{
 
					res_no : 1035,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:31,
					selfId :35
				} ,
				
				{
 
					res_no : 1036,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:31,
					selfId :36
				} ,
				
				{
 
					res_no : 1037,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:20,
					selfId :37
				} ,
				
				{
 
					res_no : 1038,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:20,
					selfId :38
				} , 
				
				
				{
 
					res_no : 1039,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:21,
					selfId :39
				} ,
				
				{
 
					res_no : 1040,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:21,
					selfId :40
				} , 
				
				{
 
					res_no : 1041,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:22,
					selfId :41
				} ,
				
				{
 
					res_no : 1042,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:22,
					selfId :42
				} ,
				
				
				{
 
					res_no : 1043,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:27,
					selfId :43
				} ,
				
				{
 
					res_no : 1044,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:27,
					selfId :44
				} ,
				
				{
 
					res_no : 1045,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:35,
					selfId :45
				} ,
				
				{
 
					res_no : 1046,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:6,
					selfId :46
				} ,
				
				
				{
 
					res_no : 1047,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:10,
					selfId :47
				} ,
				
				{
 
					res_no : 1048,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:10,
					selfId :48
				} ,
				{
 
					res_no : 1049,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:47,
					selfId :49
				} ,
				
				
				{
 
					res_no : 1050,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:49,
					selfId :50
				} ,
				
				{
 
					res_no : 1051,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:49,
					selfId :51
				} ,
				
				
				{
 
					res_no : 1052,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:50,
					selfId :52
				} ,
				
				
				{
 
					res_no : 1053,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:46,
					selfId :53
				} ,
				
				{
 
					res_no : 1054,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:46,
					selfId :54
				} ,
				
				{
 
					res_no : 1055,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:54,
					selfId :55
				} ,
				
				{
 
					res_no : 1056,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:54,
					selfId :56
				} ,
				
				
				{
 
					res_no : 1057,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:56,
					selfId :57
				} ,
				
				{
 
					res_no : 1058,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:56,
					selfId :58
				} ,
				
				{
 
					res_no : 1059,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:58,
					selfId :59
				} ,
				
				{
 
					res_no : 1060,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:58,
					selfId :60
				} ,
				
				
				{
 
					res_no : 1061,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:34,
					selfId :61
				} ,
				
				{
 
					res_no : 1062,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:34,
					selfId :62
				} ,
				
				{
 
					res_no : 1063,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:62,
					selfId :63
				} ,
				
				{
 
					res_no : 1064,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:62,
					selfId :64
				} ,
				
				
				{
 
					res_no : 1065,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:23,
					selfId :65
				} ,
				
				{
 
					res_no : 1066,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:23,
					selfId :66
				} ,
				
				{
 
					res_no : 1067,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:24,
					selfId :67
				} ,
				
				{
 
					res_no : 1068,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:24,
					selfId :68
				} ,
				
				{
 
					res_no : 1069,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:8,
					selfId :69
				} ,
				
				{
 
					res_no : 1070,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:69,
					selfId :70
				} ,
				
				{
 
					res_no : 1071,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:70,
					selfId :71
				} ,
				
				
				{
 
					res_no : 1072,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:71,
					selfId :72
				} ,
				
				{
 
					res_no : 1073,    //资源号
					res_type:'S',       //资源类型
					parent_element:res_no,//父元素
					left_p:0,           //左边积分数
					rigth_p:0,          //右边积分数
					left_s:0,           //左边点个数
					right_s:0,          //右边点个数
					child_s:0,          //子节点个数
					bmlm_base:0,        //再增值产考基数
					level:1,            //展现的层数	
					parentId:71,
					selfId :73
				} ,
				
				

			]  ; 
		  
		  
		  //设置鼠标位置
		  function mousePosition(ev){ 
				if(ev.pageX || ev.pageY){ 
					return {x:ev.pageX, y:ev.pageY}; 
				} 
				return { 
					x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, 
					y:ev.clientY + document.body.scrollTop - document.body.clientTop 
				}; 
		  } 
		  document.onmousemove = function(ev){
		  		var mousePos = mousePosition(ev); 
					mouseX = mousePos.x; 
					mouseY = mousePos.y;
					//console.log(mouseX +' | '+mouseY); 
		  }; 
		   
		  
		  var createNode = function(nodeObj){
			    //console.log(nodeObj.index)
				var node = new fabric.Circle({
					  left: nodeObj.x ,
					  top:  nodeObj.y ,
					  strokeWidth: 0 ,
					  radius: 10 ,
					  fill: '#666' ,
					  stroke: '#666'
				}) ; 
				node.hasControls = node.hasBorders = false;
				node.lockMovementY = node.lockMovementX = true;
				node.hoverCursor = "pointer";
				//节点信息
				node.res_no = nodeObj.res_no;          //资源号
				node.res_type=nodeObj.res_type;        //资源类型
				node.parent_element=nodeObj.parent_element;//父元素
				node.left_p=nodeObj.left_p ;           //左边积分数
				node.rigth_p=nodeObj.rigth_p ;          //右边积分数
				node.left_s=nodeObj.left_s ;           //左边点个数
				node.right_s=nodeObj.right_s ;          //右边点个数
				node.child_s=nodeObj.child_s ;          //子节点个数
				node.bmlm_base=nodeObj.bmlm_base ;        //再增值产考基数
				node.level=nodeObj.level ;            //展现的层数	
				node.parentId=nodeObj.parentId ;
				node.selfId =nodeObj.selfId ;
				node.leftId =nodeObj.leftId ;
				node.rightId =nodeObj.rightId ;
				node.on('mouseover',function(){
					//判断弹出框是否超过浏览器最底端
					var posX =this.left ,posY=this.top  ;
					//console.log(   mouseY +'  -  '+ this.top);
				 	(document.body.clientWidth  - mouseX  < 228) && (posX = mouseX  -300) ; 	
					(document.body.clientHeight - mouseY  < 320) && (posY = this.top  -(300-document.body.clientHeight + mouseY)) ;
					
					
					var x = posX ,
						y = posY ,
						div = document.getElementById('pop'),
						p1  = document.getElementById('p1'),
						p2  = document.getElementById('p2'),
						p3  = document.getElementById('p3'),
						p4  = document.getElementById('p4'),
						p5  = document.getElementById('p5'),
						p6  = document.getElementById('p6'),
						p7  = document.getElementById('p7'); 
					div.style.display = "block";
					div.style.top = y+'px' ;
					div.style.left= (x+20)+'px' ;
					p1.innerHTML = this.res_no ;	
					p2.innerHTML = this.res_type;	
					p3.innerHTML = '';	
					p4.innerHTML = this.left_p;	
					p5.innerHTML = this.rigth_p;	
					p6.innerHTML = this.left_s;	
					p7.innerHTML = this.right_s;	
					p8.innerHTML = this.child_s;	
					p9.innerHTML = this.bmlm_base;	
					p10.innerHTML = this.level;	
				
				});
				/*
				node.on('mouseout',function(){
					var div = document.getElementById('pop');
						div.style.display = "none";
				});
				*/
				node.on('object:dblclick',function(){
					nodeArr.forEach(function(nodeObj){
						nodeObj.leftId = null;
						nodeObj.rightId = null;
						nodeObj.currLevel= null;
					});
					
					
					//nodeArr[i].leftId = nodeArr[i].rightId = null ;
					for(var i=0 ;i<nodeArr.length ;i++){
						
						if (nodeArr[i].selfId == this.selfId ){	 
							//debugger
							canvas.clear();	
							
							nodeArr[i].x = 1720;
							nodeArr[i].y = 50  ;
							nodeArr[i].currLevel = 1;			 
							createNode(nodeArr[i]);
							drawNode(nodeArr[i]);
							break;
						}
					}
					//drawNode();
					
				});
				
				
					 
				//return node;	
				//console.log(node.selfId)
				var text = new fabric.Text(""+node.selfId, { 
					left: nodeObj.x, 
					top: nodeObj.y + 2 ,
					fill: '#fff' ,
					fontSize:10  
			 
				});
				text.hasControls = text.hasBorders = false;
				text.lockMovementY = text.lockMovementX = true;
				text.hoverCursor = "pointer"; 
				canvas.add( node  );
					  
		  };
		  
		  
		  function windowTocanvas(canvas, x, y) {
				var bbox = canvas.getBoundingClientRect();
				return {
				  x: x - bbox.left * (canvas.width / bbox.width), 
				  y: y - bbox.top * (canvas.height / bbox.height)
				}; 
		  }
		  
		  
	 	  var posOffset = [
		  		//[640,150],
				//[320,120],
				//[160,100],
				//[80 ,80 ],
				//[40 ,50 ]
				[0,0],
				[832,160],
				[416,120],
				[208 ,100 ],
				[104 ,90 ] ,
				[52 ,80 ] ,
				[26 ,70] ,
				[13 ,50] 
		  ] ;
		  
		  function drawNode(node){
			   
			  	var selfFn = arguments.callee; 
			    if ( node ) { 
				    
					var nodeLeft = null ,nodeRight = null ;
					//取当前对象的左,右子对象
					for(var i = 0 ;  i< nodeArr.length ;i++ ){	
					    				
						if 	( nodeArr[i].parentId  == node.selfId &&  node.leftId ==null ){
							//设置此节点对应的左子对象Id
							node.leftId = nodeArr[i].selfId;
							//设置节点当前层数
							nodeArr[i].currLevel = node.currLevel+ 1 ;
							//设置节点坐标
							nodeArr[i].x = node.x -  posOffset[node.currLevel][0] ;
							nodeArr[i].y = node.y +  posOffset[node.currLevel][1] ;
							
							nodeLeft = nodeArr[i] ;
							//console.log('left:'+i);
						 
							//画节点间连线
							var line = drawLine([node.x,node.y,nodeLeft.x,nodeLeft.y]);
							canvas.add(line);
							//创建节点
							createNode(nodeLeft)
							 
							
						} else if (nodeArr[i].parentId  == node.selfId &&  node.rightId==null ){
							//设置此节点对应的右子对象Id
							node.rightId = nodeArr[i].selfId;
							//设置节点当前层数
							nodeArr[i].currLevel = node.currLevel+ 1;
							//设置节点坐标
							nodeArr[i].x = node.x +  posOffset[node.currLevel][0]  ;
							nodeArr[i].y = node.y +  posOffset[node.currLevel][1] ;
							 
							nodeRight = nodeArr[i] ;
							//console.log('right:'+i);
						 
							//画节点间连线
							var line = drawLine([node.x,node.y,nodeRight.x,nodeRight.y]);
							canvas.add(line);
							//创建节点
							createNode(nodeRight)
						 
						}
					}
					//判断当前对象是否有左,右子对象
					if (nodeLeft ) {
						drawNode(nodeLeft)
					};
					
					if (nodeRight) {
						drawNode(nodeRight)
					};	
				
				} else {
					//第一层					 
					for(var i = 0 ; i< nodeArr.length ;i++){						
						if 	( nodeArr[i].parentId == null ){
							//console.log('parentId:'+nodeArr[i].parentId)
							//从原数据对象删除第一层对象
							//var newNode = nodeArr.slice(i,i+1);
							nodeArr[i].x = 1720;
							nodeArr[i].y = 50;
							nodeArr[i].currLevel = 1;
							//创建节点
							createNode(nodeArr[i]);
							selfFn(	nodeArr[i]) ;
							break;
							 
						}
					}
				} 
		  }
		  
		  function drawLine(coords){
			  //console.log(coords)
			  //画节点之间的连线
			  var line = new fabric.Line(coords, {
				  fill: 'red',
				  stroke: 'red',
				  strokeWidth: 3,
				  selectable: false,
				  globalCompositeOperation:'destination-over'
			  });			  
			  return line;
		  }
		  
		  canvas.on('mouse:down',function(){
			  var div = document.getElementById('pop') ;
			  	  div.style.display = 'none';
			  
		  });
	 
		  //绘制所有的节点	
		  drawNode();
		  
		  
		  
		  
		  /*
		  //console.dir(nodeArr);
		  
	 	  canvas.on('mouse:over', function(e) {
			    if (e.target.radius  ){
					var x = e.target.left,
						y = e.target.top ,
						div = document.getElementById('pop'),
						p1  = document.getElementById('p1'),
						p2  = document.getElementById('p2'),
						p3  = document.getElementById('p3'),
						p4  = document.getElementById('p4'),
						p5  = document.getElementById('p5'),
						p6  = document.getElementById('p6'),
						p7  = document.getElementById('p7');
						
 
					
					div.style.display = "block";
					div.style.top = y+'px' ;
					div.style.left= (x+20)+'px' ;
					p1.innerHTML = e.target.res_no ;	
					p2.innerHTML = e.target.res_type;	
					p3.innerHTML = '';	
					p4.innerHTML = e.target.left_p;	
					p5.innerHTML = e.target.rigth_p;	
					p6.innerHTML = e.target.left_s;	
					p7.innerHTML = e.target.right_s;	
					p8.innerHTML = e.target.child_s;	
					p9.innerHTML = e.target.bmlm_base;	
					p10.innerHTML = e.target.level;	
					
				}
				
		  }).on('mouse:out', function(e) {
			   
			  return
			    if (e.target.radius){
					var x = e.target.left,
						y = e.target.top ,
						div = document.getElementById('pop');
					div.style.display = "none";
				}
				 
				
		  });
		*/
		
	 
		
	 
		})() ;
	</script>


  </body>
</html>



 




















  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值