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 ...
随机推荐
- Angular 18+ 高级教程 – 学以致用
前言 读这么多原理,到底为了什么?真实项目中真的会用得到吗? 你正在疑惑 "知识的力量" 吗? 本篇会给一个非常非常好的案例,让你感悟 -- 知识如何用于实战. 记住,我的目的是让 ...
- IOI2000 邮局 加强版 题解
[IOI2000] 邮局 加强版 题解 考虑动态规划,设 \(f_{i,j}\) 为经过了 \(i\) 个村庄,正在建第 \(j\) 个邮局的最优距离. 以及 \(w_{i,j}\) 表示区间 \( ...
- Maven高级——继承与聚合
继承与聚合 聚合 聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合 聚合工程:通常是一个不具有业务功能的"空"工程(有且仅有一个pom文件) 作用:使用聚合工程可以将 ...
- 控制请求并发数量:p-limit 源码解读
p-limit 是一个控制请求并发数量的库,他的整体代码不多,思路挺好的,很有学习价值: 举例 当我们同时发起多个请求时,一般是这样做的 Promise.all([ requestFn1, reque ...
- 如何判断一个网站是用的Nginx,还是Apache
事件起因: 接手了同事移交过来的一个网站,但是不知道这个网站是用什么做代理的,于是就去网上查资料 解决办法: 打开cmd窗口,输入以下命令即可 curl --head 域名/IP 注意,--hea ...
- Vue 调用后台接口导出Excel
vue 调用后台接口生成 Excel 咱也不会前端,就是现学现卖. Js export function exportOnlyB(reportId) { return request({ url: & ...
- USB协议详解第11讲(USB描述符-总结)
描述符回顾总结 1.其实所有的描述符都是USB设备用来描述自己属性及用途的,所以必须在设备端实现对应的描述符,主机会在枚举此设备的时候根据设备实现的描述符去确定设备到底是一个什么样的设备.设备需要的总 ...
- USB协议详解第4讲(USB描述符-标准配置描述符)
1.USB描述符 USB描述符有设备描述符.标准配置描述符.接口描述符.端点描述符.字符串描述符,HID设备有HID描述符.报告描述符和物理描述符.今天主要是学习USB标准配置描述符的组成. 2.标准 ...
- Excel488个函数一览
目录: 常用函数 Web 函数 财务函数 查找和引用函数 多维数据集函数 工程函数 兼容性函数 逻辑函数 日期和时间函数 数据库函数 数学和三角函数 统计函数 文本函数 信息函数 与加载项一起安装的用 ...
- KubeSphere 对 Apache Log4j 2 远程代码执行最新漏洞的修复方案
Apache Log4j 2 是一款开源的日志记录工具,被广泛应用于各类框架中.近期,Apache Log4j 2 被爆出存在漏洞,漏洞现已公开,本文为 KubeSphere 用户提供建议的修复方案. ...