欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue使用konva實現(xiàn)一個簡便的流程圖

 更新時間:2023年08月29日 08:55:53   作者:躺平使者  
日常開發(fā)中我們可能碰到流程圖的需求,實現(xiàn)流程圖的庫有很多,如果我們想要實現(xiàn)一個簡便的流程圖可以使用konva庫來實現(xiàn),下面我們就來看一下具體的實現(xiàn)過程,需要的朋友可以參考下

konva

Konva是一個Canvas相關庫,該庫提供了各種動畫、綁定事件等用于繪制圖形.使用起來也很方便,如果你了解Canvas語法就能快速上手,不了解也沒關系,Canvas相關的是圖形屬性的設置,跟著文檔進行設置即可。 konva的構造很簡單,首先我們先了解一下相關概念:

  • state:數(shù)據(jù)的根節(jié)點。
  • layer(圖層):子節(jié)點數(shù)據(jù),里面包含著具體的圖形或圖形組。
  • grops(組):圖形組,由多個圖形組成,我們可以給一組內的圖形設置樣式或事件。
  • shapes(圖形):圖形,繪制到頁面的圖形,比如圓形、矩形等。圖形的屬性設置就跟Cansvas屬性一樣。konva對象是樹狀結構,具體構造類似于節(jié)點,由以上屬性構成。

1693141929050.png

konva的工作原理與創(chuàng)造步驟也就是如此,根據(jù)數(shù)據(jù)結構我們可以寫一個簡單的demo。

1693144060632.png

啟動項目我們就能看到一個紅色矩形。

1693144200029.png

上述代碼中我們就在圖層中嵌入了一個矩形,而矩形的屬性項就是Canvas相關屬性。下面我們嵌入一個組:

1693149331606.png

1693149375497.png

以上就是konva繪制圖形的過程,總結來說起來就是:創(chuàng)建state-->layer-->group/shape-->add添加-->layer.drwo()繪制。圖形的具體語法可以查閱文檔。除此之外,konva還有對應vue版本、與react版本。

流程圖

如果我們繪制的流程圖主要用于展示、交互很少,那么konva繪制流程圖跟Canvas差不多,下面我們就用konva實現(xiàn)一個流程圖。

常量屬性

對于流程圖里的圖形來說,有些屬性值比如:顏色、半徑、線寬大部分圖形是一樣的,針對這些值我們聲明一個對象保存,如果需要修改某個屬性值,直接修改對象中對應的屬性即可。

   const defaultConfig = {
      radius: 30, //圓半徑
      arrowRadius: 10, //箭頭圓半徑
      rectWith: 60, // 矩形的寬
      rectHeight: 40,// 矩形的高
      yellow: 'rgb(254, 187, 29)',
      blue: 'rgb(0,117,255)',
      grey: 'rgb(155,162,160)'
}

組裝

流程圖的繪制很簡單,由一個個圖形組裝起來的,根據(jù)具體的需求我們將流程圖分為n個圖形,通過圖形的x、y屬性組裝起來。比如我們來實現(xiàn)一個開始->結束的簡單流程。 開始、結束我們就用defaultConfig里面的屬性,節(jié)點之間的連接直接用konva的Arrow箭頭進行連接。

1693214304999.png

1693214395125.png

上面流程圖由五部分構成,矩形跟文字是一組的,文字的位置是相對于矩形位置設置,以此來保證文字居中,箭頭跟兩個矩形之間的連接是通過坐標確認的,圖形與圖形之間的坐標構成了流程圖。流程圖的拼接就是去計算各個坐標,知道了這點碰到復雜點的流程圖我們只要梳理好各個圖形的坐標就能繪制出來。

封裝

上面例子中只有兩個流程節(jié)點,但是我們聲明了四個常量,節(jié)點一多常量也會更加得多,并且聲明的變量主要區(qū)別就是坐標的變動,所以我們可以把創(chuàng)建節(jié)點封裝成一個函數(shù),將坐標等屬性當成參數(shù)。按照此思路,我們把創(chuàng)建過程封裝成一個類,想要去繪制時,直接new一個,傳入相關配置。

   export class DrawGraph {
      el: any | string
      layer: Layer
      items: any[]
      stage: Stage
      constructor(el: string | HTMLDivElement) {
        if (typeof el === 'string') {
          this.el = document.querySelector(el)
        } else {
          this.el = el
        }
        this.layer = new Layer()
        this.items = []
        this.stage = new Stage({
          container: this.el,
          width: 500,
          height: 500,
        })
      }
  }

首先我們創(chuàng)建根節(jié)點stage與圖層layer,items用來保存每個流程節(jié)點,接下來聲明創(chuàng)建矩形與箭頭的函數(shù)。

1693217135671.png

id就是每個節(jié)點的唯一標識,type表示圖形類型,shape表示圖形組。接下來就是我們根據(jù)配置項去聲明一個渲染函數(shù)。

   // 渲染圖表
  render = (processConfig: any[]) => {
    // 循環(huán)創(chuàng)建圖表
    processConfig.forEach((item: { type: any; params: any }) => {
      const { type, params } = item
      this['create' + type](params)
    })
    this.stage.add(this.layer)
    this.layer.draw()
  }

precessConfig表示用來聲明節(jié)點的配置項,我們用封裝好的類再次實現(xiàn)上面的流程圖。

1693218510413.png

   const initGraph = () => {
  const config = document.querySelector('#wrapper') as HTMLDivElement
  const graph = new DrawGraph(config)
  graph.render(processConfig)
}
onMounted(() => {
  initGraph()
})

1693218605743.png

這樣做代碼的可讀性大大提升了,后續(xù)維護起來也很方便,想要添加哪種圖形就添加對應的函數(shù),具體的api就去查官方文檔。

總結

以上就是konva實現(xiàn)一個流程圖的方法,文中的例子只是簡單用了下konva,konva本身還有很多功能,可以讓我們去實現(xiàn)更加復雜的需求。

到此這篇關于Vue使用konva實現(xiàn)一個簡便的流程圖的文章就介紹到這了,更多相關Vue konva流程圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue3 pinia使用及持久化注冊

    vue3 pinia使用及持久化注冊

    本文介紹了Pinia的使用方法及如何實現(xiàn)狀態(tài)持久化存儲,首先,介紹了Pinia的安裝和在main.ts中的掛載,介紹了getters和actions的使用方法,最后,詳細說明了如何通過Pinia-plugin-persistedstate插件實現(xiàn)Pinia狀態(tài)的持久化處理,包括插件的安裝、配置和在main.ts文件中的注冊
    2024-10-10
  • Vue+Echarts實現(xiàn)繪制動態(tài)折線圖

    Vue+Echarts實現(xiàn)繪制動態(tài)折線圖

    這篇文章主要為大家詳細介紹了如何利用Vue和Echarts實現(xiàn)繪制動態(tài)折線圖,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-03-03
  • 詳解10分鐘學會vue滾動行為

    詳解10分鐘學會vue滾動行為

    本篇文章主要介紹了vue滾動行為,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • vue router路由嵌套不顯示問題的解決方法

    vue router路由嵌套不顯示問題的解決方法

    這篇文章主要為大家詳細介紹了vue router路由嵌套不顯示的問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下vue-router 路由嵌套不顯示問題
    2017-06-06
  • vue自定義彈框效果(確認框、提示框)

    vue自定義彈框效果(確認框、提示框)

    這篇文章主要為大家詳細介紹了vue自定義彈框,實現(xiàn)確認框、提示框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Vue子組件向父組件傳值示范方法

    Vue子組件向父組件傳值示范方法

    這篇文章主要介紹了Vue子組件向父組件傳值方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-03-03
  • Vue nextTick的原理解析

    Vue nextTick的原理解析

    這篇文章主要介紹了Vue nextTick的原理解析,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下
    2021-04-04
  • Vue?插件及瀏覽器本地存儲

    Vue?插件及瀏覽器本地存儲

    這篇文章主要介紹了Vue?插件及瀏覽器本地存儲,插件通常用來為Vue添加全局功能,包含install方法的一個對象。更多相關介紹,需要的小伙伴可以參考下面文章內容
    2022-05-05
  • vue store之狀態(tài)管理模式的詳細介紹

    vue store之狀態(tài)管理模式的詳細介紹

    這篇文章主要介紹了vue store之狀態(tài)管理模式的詳細介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Vue3如何使用axios發(fā)起網(wǎng)絡請求

    Vue3如何使用axios發(fā)起網(wǎng)絡請求

    這篇文章主要介紹了Vue3如何使用axios發(fā)起網(wǎng)絡請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論