css+vue實現流程圖


  

主要用css+flex布局實現樣式部分,vue實現組件邏輯。首先看下效果吧:

 

當空間不夠時還可以使用拖拽功能

 

 

接下來說明下實現思路

1.首先是實現單個節點樣式,這個很簡單不談了,節點后都跟有一小段連接線,只有葉子節點沒有連接線。使用偽元素after實現連接線,子節點添加額外樣式來取消連接線。

 

 

 

2.然后是父子節點之間的連接線,因為有兩種情況(a.只有一個子節點的;b.有多個子節點),所以要分情況實現

 

 

 

2.1子節點公共樣式process-tree-childNodes設置為inline-block;vertical-align: middle;以此來實現與父節點的樣式對齊; 緊跟的div設置為flex豎排布局

2.2單個子節點添加額外樣式single-node,設置他的偽元素before為橫向連接線,;多個子節點添加額外樣式multiply-node,設置偽元素before為豎向的連接線

2.3多個子節點時的豎向連接線會多出來一部分,通過設置第一個子樹節點的after偽元素和最后一個子樹節點的after偽元素來遮蓋住超出部分,其余的橫向連接線都通過設置子樹節點的before偽元素實現

 

 

 好了樣式部分的大體思路就是這樣了。

然后是vue部分的實現,主要是各種樣式的添加,樹結構的數據要求組件應該可以遞歸使用

 

 最后是拖拽功能,通過指令實現

首先在外部包裝一層,設置overflow:hidden,內部的流程樹組件設置scrolll

 

 

 

 initDomwidth方法用來設置樹的寬度,通過獲取所有葉子節點的距離根節點左邊的距離,取最大值做為樹的寬度,防止寬度不夠導致樹變形。為了能夠拖拽,在乘以一個系數作為最終的樹寬度。

 

 

我已經上傳了組件到npm,感興趣的盆友可以試試看,npm install process-tree-vue。

最后,這個只是試驗性質的demo,因為流程圖多用於做展示,展示要求各種各樣,可以在此基礎上做調整修改來適應要求。

github地址:https://github.com/sc1992sc/processTree

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM