Konva.js
1.前言
- 简介:Konva.js - 适用于桌面/移动端应用的 HTML5 2d canvas 库
- 个人体验:原生的canvas只支持绘制基本的直线,矩形,文字,图片,扇形等,如果要支持更复杂的功能,无法支持复杂的图形,移动,动画等,所以得引用相关库来实现,提示开发效率
- 本篇文章只是初步使用,更详细的功能请查阅 官方文档
2.基本说明
- 无论是网页还是游戏引擎,其本质都是节点嵌套,最终组合到一起进行渲染,Konva也一样
- Konva有以下对象Stage(舞台),layers(图层),groups(组),和 shapes(图形)
- 节点结构图:groups(组)不是必须的,它可以看作是多个shapes(图形)的一个组合

3.基本使用
- Konva的对象虽然父子结构是固定的,但是对象创建时是彼此独立的,等创建完毕后再添加到对应的父节点即可
<script>
//创建Stage(舞台)
var stage = new Konva.Stage({
container: 'box',//传入容器id,一般对应的元素是div,Konva会创建的dom结构放入这个容器中
width: 500,//必填 画布大小
height: 500,//必填 画布大小
})
//创建layers(图层)
var layer = new Konva.Layer()
//创建groups(组)
//创建shapes(图形)
var circle = new Konva.Circle({
x: stage.width() / 2,//圆心坐标
y: stage.height() / 2,//圆心坐标
radius: 70,//半径
fill: 'red',//填充色
stroke: 'black',//描边色
strokeWidth: 4,//描边大小
})
</script>
- 将创建的节点添加到对应的位置,并执行渲染
<script>
//将图形添加到layers(图层)
layer.add(circle)
//将layers(图层)添加到舞台
stage.add(layer)
//执行渲染
layer.draw()
</script>
- 渲染结果

3.groups(组)
- 创建groups(组)
//创建groups(组)
var group = new Konva.Group({
x: 0,//位置坐标
y: 0,//位置坐标
//宽高非必填
})
- 将shapes(图形)添加到创建groups(组)中
//将图形添加到组
group.add(circle)
- 完整代码
<script>
//创建Stage(舞台)
var stage = new Konva.Stage({
container: 'box',//传入容器id,一般对应的元素是div,Konva会创建的dom结构放入这个容器中
width: 500,//必填 画布大小
height: 500,//必填 画布大小
})
//创建layers(图层)
var layer = new Konva.Layer()
//创建groups(组)
var group = new Konva.Group({
x: stage.width() / 2,//位置坐标
y: stage.height() / 2,//位置坐标
//宽高非必填
})
//创建shapes(图形)
var circle = new Konva.Circle({
x: 0,//圆心坐标
y: 0,//圆心坐标
radius: 30,//半径
fill: 'red',//填充色
})
//创建shapes(图形)
var circle2 = new Konva.Circle({
x: 50,//圆心坐标
y: 50,//圆心坐标
radius: 30,//半径
fill: 'blue',//填充色
})
//将图形添加到组
group.add(circle)
group.add(circle2)
//将组添加到layers(图层)
layer.add(group)
//将layers(图层)添加到舞台
stage.add(layer)
//执行渲染
layer.draw()
</script>
- 关于坐标:shapes(图形) 的坐标是其实就是相对于他们父节点原点的偏移量

4.使用vue渲染
- 可以把Konva的对象Stage(舞台),layers(图层),groups(组),和 shapes(图形) 当成一个个组件进行调用,使用插槽的形式代替add()方法,让代码结构更加直观
- 需要引入对应的插件vue-konva,下载地址
<body>
<div id="app" v-cloak>
<v-stage :config="configKonva">
<v-layer>
<v-circle :config="configCircle"></v-circle>
</v-layer>
</v-stage>
</div>
</body>
<script src="./libs/vue/2.6.14/vue.min.js"></script>
<script src="./libs/konva/konva.min.js"></script>
<script src="./libs/konva/vue-konva.min.js"></script>
<script>
new Vue({
el: "#app",
data: {
//Stage(舞台)配置参数
configKonva: {
width: 500,//必填 画布大小
height: 500,//必填 画布大小
},
//图形配置参数
configCircle: {
x: 50,//圆心坐标
y: 50,//圆心坐标
radius: 30,//半径
fill: 'red',//填充色
}
}
})
</script>
- 渲染结果:

Konva.js的更多相关文章
- 利用面向对象思想封装Konva动态进度条
1.html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 使用Konva创建进度条
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用konva来绘制一个矩形
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Konva的使用
KonvaJS 快速入门 Konva 是一个 基于 Canvas 开发的 2d js 框架库, 它可以轻松的实现桌面应用和移动应用中的图形交互交互效果. Konva 可以高效的实现动画, 变换, 节点 ...
- canvas制作柱形图/折线图/饼状图,Konva写动态饼状图
制作饼状图 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- JS学习-常用的Web API
web API web-api 分类 链接 描述 操作文档的API 操作document dom,html,svg 从服务器获取数据的API XMLHttpRequest XMLHttpRequest ...
- 第165天:canvas绘制圆环旋转动画
canvas绘制圆环旋转动画——面向对象版 1.HTML 注意引入Konva.js库 <!DOCTYPE html> <html lang="en"> &l ...
- 封装构造函数,用canvas写饼状图和柱状图
封装构造函数,用canvas写饼状图和柱状图 封装函数 // 场景 function XDLScence( options ) { this.stage = options.stage; //执行场景 ...
- Canvas开发库封装
一.Canvas第三方类库 1.常见的第三方类库 konva.js <style> body{ margin:0; } </style> </head> <b ...
- HTML5 Canvas 2D library All In One
HTML5 Canvas 2D library All In One https://github.com/search?q=Javascript+Canvas+Library https://git ...
随机推荐
- CSS & JS Effect – 脉冲 Pulse Play Button
效果 参考 Youtube – Create a pulsing animation with CSS 重点 在背后做一个一样大的 div border 然后 animation scale up. ...
- 大模型应用开发初探 : 快速直观感受RAG
大家好,我是Edison. 上一篇,我们了解了什么如何让一些开源小参数量模型具有函数调用的能力.这一篇,我们来快速了解下RAG(检索增强生成)并通过一个简单的DEMO来直观感受一下它的作用. RAG是 ...
- 《Vue.js 设计与实现》读书笔记 - 第 4 章、响应系统的作用与实现
第 4 章.响应系统的作用与实现 4.1 响应式数据与副作用 副作用函数就是会对外部造成影响的函数,比如修改了全局变量. 响应式:修改了某个值的时候,某个会读取该值的副作用函数能够自动重新执行. 4. ...
- USB ncm虚拟网卡
NCM介绍 1 功能 USB NCM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Network Control Model,用于Host和Dev ...
- 强大的USB协议分析工具
2020年最后一天了,感谢大家一年来对我文章的支持,有你们的支持就是我强大的动力. 今天来给大家介绍一个USB 协议分析软件LeCroy USB Advisor,软件安装包下载连接如下: 链接:htt ...
- 技术分享 | 徐轶韬:从MySQL5.7升级到MySQL 8.0
在6月20日举办的[墨天轮数据库沙龙-MySQL 5.7 停服影响与应对方案]中,甲骨文MySQL解决方案首席工程师徐轶韬分享了<从MySQL5.7升级到MySQL 8.0>主题演讲,本文 ...
- 墨天轮访谈 | 华为云温云博:从客户视角出发,GaussDB(for Redis)究竟“香”在哪里?
分享嘉宾:温云博 华为云数据库NoSQL团队研发工程师 整理:墨天轮社区 导读 GaussDB(for Redis)采用云原生分布式架构,完全兼容Redis协议,支持丰富数据类型. 提供数据实时持久化 ...
- netCore 封装一个检验邮箱的类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 斜率优化DP简单总结&&“土地购买”题解
今天刚刷完了斜率优化DP,简单从头回顾一下. \[首先,能写出DP方程应该是最重要的,毕竟斜率只是用来优化的 \] 那么一个DP方程能用斜率优化,具备一种形式: \[f[i]+s1[i]+A[i]*B ...
- HttpUtils 详解
一.详解 1.1 介绍 现如今的 Web 项目,由服务端向外发起网络请求的场景,基本上随处可见! 传统情况下,在服务端代码里访问 http 服务时,一般会使用 JDK 的 HttpURLConnect ...