Vue plugin for HTML5 Canvas + Vue.js, nice and straightforward. Built on Konva.
npm i can-vue
Register the plugin:
import CanVue from 'can-vue'
Vue.use(CanVue)
// instantiate your Vue instance after registering
new Vue({
// ...options
})Then, in a single-file component:
<template>
<can-vue>
<!-- your canvas content here! -->
</can-vue>
</template>You can then add shapes from Konva inside can-vue with draw-shape and some props:
<template>
<can-vue>
<draw-shape
shape="circle"
x="100"
y="100"
width="50"
height="50"
opacity="1"
fill="red"/>
</can-vue>
</template>Properties can be reactive:
<template>
<can-vue>
<draw-shape
shape="rect"
:x="myAnimatingValue"/>
</can-vue>
</template>and/or percentages of the canvas space:
<template>
<can-vue>
<draw-shape
shape="rect"
x="50%"/>
</can-vue>
</template>Wrapper for can-vue instance. Creates a div with classes can-vue and wrapper which wrap a canvas element and Vue slot.
| Name | Type | Default Value | Description |
|---|---|---|---|
height |
String, Number | -1 | Height in px of the canvas. Defaults to full height of containing div if -1. |
width |
String, Number | -1 | Width in px of the canvas. Defaults to full width of containing div if -1. |
Wrapper for a single Konva shape.
| Name | Type | Default Value | Description |
|---|---|---|---|
fill |
String | blue |
Fill color of this shape. |
height |
String, Number | 100 |
Height in pixels of the shape. Also accepts percentage of height of canvas. (example "50%") |
opacity |
String, Number | 1 |
Opacity of the shape. |
shape |
String | Rect |
Konva shape to render. Works with Rect and Circle currently. |
width |
String, Number | 100 | Width in pixels of the shape. Also accepts percentage of height of canvas (example "50%") |
x |
String, Number | 0 | X coordinate in pixels. Also accepts percentage of width of canvas (example "50%") |
y |
String, Number | 0 | Y coordinate in pixels. Also accepts percentage of height of canvas (example "50%") |
What about vue-konva?
Vue-Konva is great, but it's a bit more complicated than can-vue in order to support Konva's full feature set. I was looking for a simple, reactive canvas framework for Vue and, since Vue-Konva isn't reactive, made a quick version of my own.