點燈坊

失くすものさえない今が強くなるチャンスよ

使用 Vue-konva 以 HTML 5 Canvas 繪圖

Sam Xiao's Avatar 2020-07-16

Vue-konva 底層為 HTML 5 Canvas,可簡單使用 Canvas 繪圖,並具有 Vue 的 Declarative 與 Reactive 特性。

Version

macOS Catalina 10.15.5
WebStorm 2020.1.3
Vue 2.6.11
Vue-konva 2.1.3

Install Package

$ yarn add vue-konva konva

使用 Yarn 安裝 Vue-konva 與 Konva。

konva000

main.js

import Vue from 'vue'
import App from './App.vue'
import VueKonva from 'vue-konva'

Vue.use(VueKonva)

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

第 3 行

import VueKonva from 'vue-konva'

引入 Vue-konva。

第 5 行

Vue.use(VueKonva)

Vue 引入 VueKonva

konva001

Vue Component

<template>
  <v-stage :config="stageConfig">
    <v-layer>
      <v-rect :config="rectConfig"></v-rect>
    </v-layer>
  </v-stage>
</template>

<script>
let width = window.innerWidth
let height = window.innerHeight

export default {
  name: 'App',
  data: _ => ({
    stageConfig: {
      width, height
    },
    rectConfig: {
      x: 20,
      y: 50,
      width: 100,
      height: 100,
      stroke: 'red',
      strokeWidth: 2
    }
  })
}
</script>

第 2 行

<v-stage :config="stageConfig">
  <v-layer>
    <v-rect :config="rectConfig"></v-rect>
  </v-layer>
</v-stage>

Vue-konva 支援 declarative 在 HTML template 內,<v-rect> 必須在 <s-stage><v-layer> 使用,只要將相關資料 binding 到 config property。

16 行

stageConfig: {
  width, height
},

首先必須提供 <v-stage>widthheight

19 行

rectConfig: {
  x: 20,
  y: 50,
  width: 100,
  height: 100,
  stroke: 'red',
  strokeWidth: 2
}

提供繪製 矩形 所需要的資料,其中 stroke 為邊框顏色,strokeWidth 邊框寬度。

DevServer

$ yarn serve

啟動 DevServer。

konva002

Vue-konva 順利在 browser 繪製矩形。

Conclusion

  • Vue-konva 讓我們以 declarative 與 component 方式繪圖,完全不必使用 API,直接提供資料 binding 到 component 即可

Reference

Konva, Getting Started with Vue and Canvas via Konva