1. 程式人生 > 實用技巧 >前端 go.js 流程圖基於vue開發專案案例

前端 go.js 流程圖基於vue開發專案案例

一、流程圖效果

最近一段時間在研究go.js,它是一款前端開發畫流程圖的一個外掛,也是一個難點,要說為什麼是難點,首先,它是依賴畫布canvas知識開發。其次,要依賴於內部API開發需求,開發專案需求的時候就要花費大量的時間去熟悉go.js的API,然後才能進行開發。話不多說,我就先把我最近做的專案案例效果圖展示一下:

看到效果圖大家可能會想這個挺簡單的,會想沒什麼難點,其實真正開發的時候才會知道的、才會領悟到。

二、為什麼選go.js流程圖外掛去開發專案?

在專案開發一期的時候我用的不是go.js,而用的是一款輕便的流程外掛jsplumb.js,它也集成了各種功能性API,但是在開發二期的時候它的內部功能已經滿足不了需求了,所以我就開始在網上查詢流程外掛,看了很多外掛,比如:G6,D3 等這些視覺化流程外掛都是不能滿足需求。要說為什麼不能滿足需求,原因如下:

一、首先,看到效果圖裡的內建多點和其他模組單點連線問題,其他外掛是無法這個滿足需求的,可能我沒有深入去了解其他的流程外掛吧,但是go.js裡內建點連線可以讓開發者很快的理解程式碼邏輯,不用耗費大量的時間去想點與點的連線。

二、程式碼上的資料結構問題,其他外掛裡的API資料欄位繁瑣量多,不夠清晰明瞭,而go.js裡的資料結構就兩個重要欄位,一是所有模組的欄位集合二是連線欄位集合,根據需求可以隨意加欄位。

三、專案開發

(一)、首先直接使用go.js,畫布中是有水印的

其實這個問題不大,替換一行程式碼就可以去除水印

引入go.js後,直接在編輯器中全域性搜尋7eba17a4ca3b1a8346,找到類似這樣結構的程式碼

a.ir=b.W[Ra("7eba17a4ca3b1a8346")][Ra("78a118b7")](b.W,ok,4,4);

注:不同的版本程式碼不是完全相同的,可能是a.jv(屬性名是會變的) =‘xxxxx’,將這行程式碼替換成

a.ir=function(){return true;}; //a.屬性名 要保持一致

去除水印的效果

(二)、畫布的基本設定

this.diagram = $(go.Diagram, "chart-diagram",
				{
					// 畫布初始位置
					initialContentAlignment: go.Spot.LeftSide, // 居中顯示
					"undoManager.isEnabled": true, // 支援 Ctrl-Z 和 Ctrl-Y 操作
					// 初始座標
					// initialPosition: new go.Point(0, 0),
					//allowSelect:false,  ///禁止選中
					// "toolManager.hoverDelay": 100, //tooltip提示顯示延時
					// "toolManager.toolTipDuration": 10000, //tooltip持續顯示時間
					//  isReadOnly:true,//只讀

					//禁止水平拖動畫布
					//禁止水平滾動條
					allowHorizontalScroll: false,
					// 禁止垂直拖動畫布
					//禁止垂直滾動條
					allowVerticalScroll: false,
					allowZoom: true,//畫布是否可以縮放
					"grid.visible": false, //顯示網格
					// allowMove: true, //允許拖動
					// allowDragOut:true,
					allowDelete: true,//禁止刪除節點
					allowCopy: true,//禁止複製
					// 禁止撤銷和重做
					// "undoManager.isEnabled": false,
					// 畫布比例
					// scale:1.5,
					// minScale:1.2,//畫布最小比例
					// maxScale:2.0,//畫布最大比例
					// 畫布初始化動畫時間
					// "animationManager.duration": 600,
					// 禁止畫布初始化動畫
					"animationManager.isEnabled": false,
					// autoScale:go.Diagram.Uniform,//自適應

					// autoScale:go.Diagram.UniformToFill,//自適應
					//    "draggingTool.dragsLink": false,//拖動線
					// autoScale:go.Diagram.None,//預設值不自適應
					// 畫布邊距padding
					// padding:80或者new go.Margin(2, 0)或new go.Margin(1, 0, 0, 1)
					// validCycle: go.Diagram.CycleDestinationTree,//只允許有一個父節點
					//節點模組動畫  S
					// "animationManager.initialAnimationStyle":go.Animation.EaseOutExpo,
					// "animationManager.initialAnimationStyle": go.Animation.EaseInOutQuad,
					"animationManager.initialAnimationStyle": go.AnimationManager.None,
					// "animationManager.initialAnimationStyle":go.AnimationManager.AnimateLocations,
					//節點模組動畫   D
					// validCycle: go.Diagram.CycleNotUndirected,

					// validCycle: go.Diagram.CycleNotDirected,
					// validCycle: go.Diagram.CycleSourceTree,
					//ismodelfied:true //禁止拖拽
					// 禁止滑鼠拖動區域選中
					// "dragSelectingTool.isEnabled" : false,
					//允許使用delete鍵刪除模組
					"commandHandler.deletesTree": true,
					// "hasHorizontalScrollbar":false,//去除水平滾動條
					// "hasVerticalScrollbar":false,//去除豎直滾動條
					// "canStart":false,
					// allowClipboard: true,
					// "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom, //有滑鼠滾輪事件放大和縮小,而不是向上和向下滾動
					// layout: $(go.TreeLayout,
					// 	{ angle: 90, layerSpacing: 80 }),
				}
			);

  

先寫到這,下週繼續寫,如有不足 可以私信單聊共享技術經驗。。。。。。。。。。。。。。