最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue使用konva實(shí)現(xiàn)一個(gè)簡(jiǎn)便的流程圖

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

konva

Konva是一個(gè)Canvas相關(guān)庫(kù),該庫(kù)提供了各種動(dòng)畫(huà)、綁定事件等用于繪制圖形.使用起來(lái)也很方便,如果你了解Canvas語(yǔ)法就能快速上手,不了解也沒(méi)關(guān)系,Canvas相關(guān)的是圖形屬性的設(shè)置,跟著文檔進(jìn)行設(shè)置即可。 konva的構(gòu)造很簡(jiǎn)單,首先我們先了解一下相關(guān)概念:

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

1693141929050.png

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

1693144060632.png

啟動(dòng)項(xiàng)目我們就能看到一個(gè)紅色矩形。

1693144200029.png

上述代碼中我們就在圖層中嵌入了一個(gè)矩形,而矩形的屬性項(xiàng)就是Canvas相關(guān)屬性。下面我們嵌入一個(gè)組:

1693149331606.png

1693149375497.png

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

流程圖

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

常量屬性

對(duì)于流程圖里的圖形來(lái)說(shuō),有些屬性值比如:顏色、半徑、線(xiàn)寬大部分圖形是一樣的,針對(duì)這些值我們聲明一個(gè)對(duì)象保存,如果需要修改某個(gè)屬性值,直接修改對(duì)象中對(duì)應(yīng)的屬性即可。

   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)'
}

組裝

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

1693214304999.png

1693214395125.png

上面流程圖由五部分構(gòu)成,矩形跟文字是一組的,文字的位置是相對(duì)于矩形位置設(shè)置,以此來(lái)保證文字居中,箭頭跟兩個(gè)矩形之間的連接是通過(guò)坐標(biāo)確認(rèn)的,圖形與圖形之間的坐標(biāo)構(gòu)成了流程圖。流程圖的拼接就是去計(jì)算各個(gè)坐標(biāo),知道了這點(diǎn)碰到復(fù)雜點(diǎn)的流程圖我們只要梳理好各個(gè)圖形的坐標(biāo)就能繪制出來(lái)。

封裝

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

   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é)點(diǎn)stage與圖層layer,items用來(lái)保存每個(gè)流程節(jié)點(diǎn),接下來(lái)聲明創(chuàng)建矩形與箭頭的函數(shù)。

1693217135671.png

id就是每個(gè)節(jié)點(diǎn)的唯一標(biāo)識(shí),type表示圖形類(lèi)型,shape表示圖形組。接下來(lái)就是我們根據(jù)配置項(xiàng)去聲明一個(gè)渲染函數(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表示用來(lái)聲明節(jié)點(diǎn)的配置項(xiàng),我們用封裝好的類(lèi)再次實(shí)現(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ù)維護(hù)起來(lái)也很方便,想要添加哪種圖形就添加對(duì)應(yīng)的函數(shù),具體的api就去查官方文檔。

總結(jié)

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

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

相關(guān)文章

  • Vue CLI4 Vue.config.js標(biāo)準(zhǔn)配置(最全注釋)

    Vue CLI4 Vue.config.js標(biāo)準(zhǔn)配置(最全注釋)

    這篇文章主要介紹了Vue CLI4 Vue.config.js標(biāo)準(zhǔn)配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Vue 自定義ColorPicker及使用方法

    Vue 自定義ColorPicker及使用方法

    這篇文章主要介紹了Vue 自定義ColorPicker及使用方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Vue框架下引入ActiveX控件的問(wèn)題解決

    Vue框架下引入ActiveX控件的問(wèn)題解決

    這篇文章主要介紹了Vue框架下引入ActiveX控件的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue調(diào)試工具vue-devtools安裝及使用方法

    vue調(diào)試工具vue-devtools安裝及使用方法

    本文主要介紹 vue的調(diào)試工具 vue-devtools 的安裝和使用,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-11-11
  • IDEA安裝vue插件圖文詳解

    IDEA安裝vue插件圖文詳解

    這篇文章主要為大家詳細(xì)介紹了IDEA安裝vue插件圖文,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Vue中使用Three.js引入模型格式(.fbx、.glb)的實(shí)現(xiàn)步驟

    Vue中使用Three.js引入模型格式(.fbx、.glb)的實(shí)現(xiàn)步驟

    最近剛開(kāi)始做的一個(gè)項(xiàng)目,后面有個(gè)模塊要通過(guò)three.js實(shí)現(xiàn)3D的場(chǎng)景,因?yàn)橹耙矝](méi)接觸過(guò)3D這塊,就提前學(xué)了一下,做個(gè)記錄,這篇文章主要介紹了Vue中使用Three.js引入模型格式(.fbx、.glb)的實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2025-08-08
  • vue-cli腳手架初始化項(xiàng)目各個(gè)文件夾用途

    vue-cli腳手架初始化項(xiàng)目各個(gè)文件夾用途

    這篇文章主要介紹了vue-cli腳手架初始化項(xiàng)目各個(gè)文件夾用途,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 利用Vue3+ElementUI樹(shù)形菜單實(shí)現(xiàn)層次化用戶(hù)界面

    利用Vue3+ElementUI樹(shù)形菜單實(shí)現(xiàn)層次化用戶(hù)界面

    ElementUI是一個(gè)超棒的UI框架,它基于Vue.js提供了豐富的組件和樣式,可以幫你快速構(gòu)建出美觀實(shí)用的登陸頁(yè)面,這篇文章主要介紹了利用Vue3+ElementUI樹(shù)形菜單實(shí)現(xiàn)層次化用戶(hù)界面的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • element-ui修改el-form-item樣式的詳細(xì)示例

    element-ui修改el-form-item樣式的詳細(xì)示例

    在使用element-ui組件庫(kù)的時(shí)候經(jīng)常需要修改原有樣式,下面這篇文章主要給大家介紹了關(guān)于element-ui修改el-form-item樣式的詳細(xì)示例,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • vue?navbar?tabbar導(dǎo)航條根據(jù)位置移動(dòng)實(shí)現(xiàn)定位、顏色過(guò)渡動(dòng)畫(huà)效果的代碼

    vue?navbar?tabbar導(dǎo)航條根據(jù)位置移動(dòng)實(shí)現(xiàn)定位、顏色過(guò)渡動(dòng)畫(huà)效果的代碼

    這篇文章主要介紹了vue?navbar?tabbar導(dǎo)航條根據(jù)位置移動(dòng)實(shí)現(xiàn)定位、顏色過(guò)渡動(dòng)畫(huà)效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08

最新評(píng)論

鄂州市| 郑州市| 南宫市| 河间市| 乐亭县| 上杭县| 万盛区| 稻城县| 临城县| 高雄市| 陆河县| 突泉县| 云安县| 崇信县| 桐梓县| 武鸣县| 富川| 珲春市| 皮山县| 资兴市| 都匀市| 桓仁| 上犹县| 蒲江县| 盘锦市| 琼结县| 大厂| 高唐县| 荔浦县| 博罗县| 天全县| 武冈市| 大竹县| 万山特区| 望谟县| 色达县| 郓城县| 怀来县| 靖宇县| 格尔木市| 桓仁|