1. 程式人生 > >jsplumb 繪製頁面連結線

jsplumb 繪製頁面連結線

最近公司打算實現通用的流程設計,對比之前公司有一套原始碼,發現它採用的是FlowDesign來實現的,但從晚上查詢之後發現它實際上是採用了jsplumb 來實現流程繪製的,這也不難理解,畢竟jsplumb 是通用的程式,FlowDesign只能算是jsplumb的具體使用,

FlowDesign 的地址是http://flowdesign.leipi.org/

Jsplumb官網:https://jsplumbtoolkit.com

GitHub:https://github.com/sporritt/jsplumb/

jsplumb 的概念中主要分為四部分:參照jsplumb介紹的文件寫的

          錨

(Anchor):一個位置,放置端點的地方,相對於一個元素的來源,您不需要自己硬編碼來建立它,jsPlumb提供給您各種功能,您只需要按照您的需要建立它就可以了。它沒有視覺化的顯示,只是一個邏輯位置,可以使用錨的id來引用它,jsPlumb支援這樣做,並且您可以使用座標來表示[x,y,x方向,y方向]

         端點(Endpoint ):連結的一端的視覺化表示,您可以建立並可以連結他們;您可以讓他們支援拖拽,或者您可以直接使用jsPlumb.connect()在建立連結時直接建立它們。

         聯結器

(Connector):連結兩個元素的線,頁面的視覺化表示,jsPlumb有三種預設型別:Bezier曲線,直線,和流程圖連結器,您不用去處理聯結器,當您需要使用它們時,您只需要定義它們即可。

         覆蓋物(Overlay):一個UI元件,是用來是用來裝飾聯結器,例如標籤、箭頭等。

參照https://segmentfault.com/a/1190000013422507 繪製的位置圖來理解

 

按照說明必須引用的檔案如下:

        <script type="text/javascript" src="js/jquery.min.js" ></script>
        <script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js" ></script>
        <script type="text/javascript" src="js/jsplumb.min.js" ></script>
         <link rel="stylesheet" href="https://code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css">

在使用jsplumb來實現自己的示例程式如下:

<style>
		    #diagramContainer {
			  padding: 20px;
			  width: 80%;
			  height: 400px;
			  border: 1px solid gray;
			  background-image: url(http://p3alsaatj.bkt.clouddn.com/20180227163310_1bVYeW_grid.jpeg);
			  background-repeat: repeat;
			}
		
		    .item {
		      height: 80px;
		      width: 80px;
		      border: 1px solid blue;
		      float: left;
		    }
					    
			.myCssClass
			{
				color: bisque;
				background-color: red;
			}
					    
		  </style>
  
	</head>
	<body>
		 <div id="diagramContainer">
		    <div id="item_left" class="item"></div>
		    <div id="item_right" class="item" style="margin-left:300px;margin-top: 100px;"></div>
		  </div>
	</body>
	<script>
	
	  //Straight:直線,Bezier :Bezier曲線,流程圖連結器 Flowchart
	
	  var common = {
        isSource:true,
        isTarget:true,
        connector: ['Bezier'],
        //paintStyle: { stroke: 'lightgray', strokeWidth: 3 },//空的錨點風格
        endpointStyle: { fill: 'lightgray', outlineStroke: 'darkgray', outlineWidth: 2 }
       
      }
	  
	  jsPlumb.ready(function(){
	  	
           //新增節點
		   jsPlumb.addEndpoint('item_left',{achors:['Right']},common)
		   jsPlumb.addEndpoint('item_right',{achors:['Left']},common)
	       	
          
       	  jsPlumb.draggable('item_left', {
			  containment: 'parent',
			  grid: [10, 10]
			})
       	  
           jsPlumb.draggable('item_right')
           
            // 單點選了連線線, 似乎不怎麼好用
			jsPlumb.bind('click', function (conn, originalEvent) {
			  if (confirm('確定刪除所點選的連結嗎?')) {
			    jsPlumb.detach(conn)
			  }
			})
       });
       //增加拖拽,也不怎麼好用
       $('.item').resizable({
	      resize: function (event, ui) {
	        jsPlumb.repaint(ui.helper)
	      }
	    })
       
       //jsPlumb.setContainer('adiagramContainer')
       
      
  </script>

顯示效果如下

 

C#實現參考地址:http://www.cnblogs.com/sggx/p/3836432.html