---
# System prepended metadata

title: 【自學筆記】konva入門 - 基本介紹
tags: [javascript, canvas, konva]

---

###### tags: `konva`, `canvas`, `javascript`
# 【自學筆記】konva入門 - 基本介紹

`Konva`是個`HTML5 Canvas JavaScript`的框架，透過`2d context`的擴展實現各種圖形功能，正好可以實現最近工作需求，就來研究看看囉

---

### Konva的基本結構

Konva有一定的結構，有些類似於DOM結構，通過add、remove..實現節點的添加和刪除

Konve Tree主要包含四個部分：`Stage`、`Layer`、`Group`、`Shape`

:::info
Stage根節點
:::
創建一個`div`節點作為事件的接收層，根據事件觸發時的資訊來處理。
一個`Stage`可以包含多個`Layer`

:::info
Layer圖層
:::
`Layer`會創建一個`Canvas`節點，用來繪製`Canvas`的元素。
一個`Layer`可以包含多個`Group`和`Shape`

:::info
Group組
:::
`Group`包含多個`Shape`，對`Group`設置，其中的所有`Shape`都會生效

:::info
Shape
:::
指`Text`、`Rect`、`Circle`等各種Konva封裝好的類。

![](https://i.imgur.com/dzp6oKL.png)
>圖片來源: https://cloud.tencent.com/developer/article/1888589

![](https://i.imgur.com/bIHnzyG.png)
>圖片來源: https://cloud.tencent.com/developer/article/1888589

### 使用方式

最最基本的使用方式，直接看程式
```htmlembedded=
<div id="container"></div>
```
```javascript=
// 先創建一個Stage
var stage = new Konva.Stage({
    container: 'container',
    width: 500,
    height: 500
});

// 然後創建一個layer
var layer = new Konva.Layer();

// 設計圖形(Shape)
var circle = new Konva.Circle({
    x: 150,
    y: 150,
    radius: 70,
    fill: 'red',
    stroke: 'black',
    strokeWidth: 4
});

var rect = new Konva.Rect({
    x: 20,
    y: 20,
    width: 100,
    height: 50,
    fill: 'green',
    stroke: 'black',
    strokeWidth: 4,
});

// 把shape加到layer中
layer.add(circle);
layer.add(rect);

// 把整個layer加進stage
stage.add(layer);

// 畫出來
layer.draw();
```

---

*參考資料: https://konvajs.org/docs/*
*參考資料: https://cloud.tencent.com/developer/article/1888589*

*新手工程師的筆記，純粹記錄學了些啥東西
如果有前輩高人讀了我的文，文中有任何錯誤再麻煩指教指教*