该系列的入门教程教您如何使用Konva绘制第一个形状。 它还说明了层和组在Konva中如何工作。 在本系列的其余部分中,我们将专注于更具体的主题,例如创建基本和复杂的形状或将事件侦听器附加到不同的形状,以使图形具有交互性。

本教程将向您展示如何在Konva中创建基本形状,例如矩形,圆形和椭圆形。 您还将了解可用于根据需要自定义所有这些形状的外观的不同属性。 本教程后面的部分将讨论如何使用Konva绘制不同种类的线和正多边形。

绘制矩形,圆形和椭圆形

您可以使用Konva.rect()对象在Konva中创建矩形。 可以使用xy属性指定矩形左上角的位置。 同样,您可以使用widthheight属性指定矩形的widthheight 。 默认情况下,您绘制的所有矩形都会有尖角。 但是,可以通过为cornerRadius属性选择适当的值来使其变圆。

可以使用visible属性显示或隐藏矩形。 如果您不想完全隐藏矩形,但仍将其设置为半透明,则可以使用opacity属性。 您可以将其设置为0到1之间的任意数字。 如果不透明度设置为0,则该形状将不可见。

您还可以分别使用rotationscale属性旋转或缩放矩形形状。 旋转指定为纯数字,但以度为单位。 您可以选择使用scaleXscaleY属性分别在x或y轴上缩放任何矩形。

这是一个使用我们刚刚讨论的所有属性在画布上绘制不同矩形的示例。

var canvasWidth = 600;
var canvasHeight = 400;var stage = new Konva.Stage({container: "example",width: canvasWidth,height: canvasHeight
});var layerA = new Konva.Layer();var rectA = new Konva.Rect({x: 10,y: 10,width: 200,height: 50,fill: "yellow",stroke: "black"
});var rectB = new Konva.Rect({x: 160,y: 30,width: 80,height: 250,fill: "orange",stroke: "black"
});var rectC = new Konva.Rect({x: 200,y: 160,width: 180,height: 180,cornerRadius: 10,strokeWidth: 10,opacity: 0.8,fill: "red",stroke: "black"
});var rectD = new Konva.Rect({x: 400,y: 20,width: 180,height: 180,scaleX: 1.8,scaleY: 0.75,rotation: 45,fill: "lightgreen",stroke: "black"
});layerA.add(rectA, rectB, rectC, rectD);stage.add(layerA);

您应注意,矩形不是按照创建顺序来绘制的。 而是按照它们添加到图层的顺序绘制它们。 fillstroke属性分别用于设置填充和描边颜色。

您可以使用Konva.circle()对象在Konva中创建圆。 这次, xy属性确定绘制圆的中心点。 您仍然可以为width和height属性都指定一个值。 这些值用于计算要绘制的圆的直径。 但是,圆的宽度和高度相等。 这意味着在发生冲突时,后面指定的值优先于前面指定的值。 换句话说,如果将圆的width设置为100, 然后将其height设置为180,则圆的直径为180,宽度将被忽略。

为避免混淆,可以省略widthheight属性,并为圆的radius指定一个值。 请记住,您必须将半径设置为50才能绘制一个宽度和高度为100的圆。

以类似的方式,您还可以使用Konva.ellipse()对象创建一个椭圆。 唯一的区别是radius属性现在将接受具有x和y属性作为其值的对象。 如果指定,则现在将独立应用width和height属性,以确定椭圆的最终形状。

var canvasWidth = 600;
var canvasHeight = 400;var stage = new Konva.Stage({container: "example",width: canvasWidth,height: canvasHeight
});var layerA = new Konva.Layer();var circA = new Konva.Circle({x: 100,y: 100,width: 180,fill: "yellow",stroke: "black"
});var circB = new Konva.Circle({x: 180,y: 150,height: 100,fill: "orange",stroke: "black"
});var circC = new Konva.Circle({x: 200,y: 275,radius: 100,opacity: 0.5,fill: "red",stroke: "black"
});var ellipA = new Konva.Ellipse({x: 400,y: 75,width: 70,height: 100,rotation: -15,fill: "lightgreen",stroke: "black"
});var ellipB = new Konva.Ellipse({x: 400,y: 75,width: 80,height: 120,rotation: -15,strokeWidth: 5,fill: "white",stroke: "black"
});var ellipC = new Konva.Ellipse({x: 450,y: 275,radius: {x: 100,y: 50},scaleY: 2,fill: "violet",stroke: "black"
});layerA.add(circA, circB, circC, ellipB, ellipA, ellipC);stage.add(layerA);

你应该注意到, ellipB有较大的高度和宽度相比于ellipA 。 由于它们都具有相同的xy值,因此我必须首先将ellipB添加到图层中以保持ellipA可见。 如果ellipB是后添加ellipA ,它会被绘制在ellipA ,来自观众的隐藏它。

如果仔细观察,您还将看到紫罗兰色圆圈实际上是一个椭圆,其y半径设置为50, x半径设置为100。但是,它已在y方向缩放了2倍。 缩放比例也增加了笔划宽度,使其在椭圆的顶部和底部的宽度是其左边缘和右边缘的两倍。

使用Konva画线

您可以使用Konva.Line()对象来创建不同种类的直线和曲线。 所有行都要求您使用points属性指定该行应通过的points 。 这些点被指定为数组。

通过将closed属性的值设置为true可以连接使用points数组提供的任何点集以形成多边形。 同样,您可以通过为tension属性设置一个值来将一组直线转换为样条线。 零值将导致直线。 较高的值会产生弯曲的线。

这是您能够通过设置的值创建闭合和弯曲的形状(BLOB) tension性质以及通过设置封闭曲线closedtrue

像我们讨论过的其他形状一样,您可以使用strokeWidth属性设置描边宽度以绘制线条。 您也可以为封闭形状指定fill颜色。

在下面的示例中,我使用了相同的点集来绘制所有形状。 但是,我也使用过move()方法将每个形状移动特定距离,以避免重叠。

var canvasWidth = 600;
var canvasHeight = 400;var stage = new Konva.Stage({container: "example",width: canvasWidth,height: canvasHeight
});var layerA = new Konva.Layer();var lineA = new Konva.Line({points: [50, 20, 20, 100, 80, 140, 60, 80, 200, 20],stroke: "black"
});var lineB = new Konva.Line({points: [50, 20, 20, 100, 80, 140, 60, 80, 200, 20],closed: true,fill: "yellow",stroke: "black"
});var lineC = new Konva.Line({points: [50, 20, 20, 100, 80, 140, 60, 80, 200, 20],tension: 0.8,stroke: "blue"
});var lineD = new Konva.Line({points: [50, 20, 20, 100, 80, 140, 60, 80, 200, 20],tension: 1.8,stroke: "red"
});var lineE = new Konva.Line({points: [50, 20, 20, 100, 80, 140, 60, 80, 200, 20],closed: true,tension: 2.2,fill: "lightblue",stroke: "black"
});lineB.move({x: 180,y: 40
});lineC.move({x: 380,y: 0
});lineD.move({x: 0,y: 200
});lineE.move({x: 180,y: 220
});layerA.add(lineA, lineB, lineC, lineD, lineE);stage.add(layerA);

您还应该注意,红线和蓝线是使用相同的点集绘制的,但是不同的tension值会显着改变曲线的最终形状。

绘制正多边形

您可以在points组中仔细选择不同点的值,以绘制规则的多边形,例如五边形和六边形。 使用此方法绘制更复杂的正八边形(例如八边形)可能很麻烦且容易出错。 为避免错误,应使用Konva.RegularPolygon()对象创建常规多边形。

xy属性用于指定多边形的中心。 radius属性用于指定多边形的中心点及其所有顶点之间的距离。 您可以使用sides属性来指定多边形应具有的边数。 请记住,使用此方法创建的多边形的所有边都将具有相等的长度。 您可以使用scaleXscaleY属性更改某些边的长度,但它也会更改缩放边的笔触宽度。

就像我们讨论过的所有其他形状一样,您可以使用strokeWidthopacitystrokeWidth更改规则多边形的笔划宽度,不透明度和可见visibility

var canvasWidth = 600;
var canvasHeight = 400;var stage = new Konva.Stage({container: "example",width: canvasWidth,height: canvasHeight
});var layerA = new Konva.Layer();var triangle = new Konva.RegularPolygon({x: 150,y: 275,sides: 3,radius: 100,scaleY: 1.6,stroke: "black",fill: "rgba(200,0,200, 1)",
});var square = new Konva.RegularPolygon({x: 60,y: 60,sides: 4,radius: 50,fill: "rgba(200,0,0, 0.5)",stroke: "black"
});var pentagon = new Konva.RegularPolygon({x: 160,y: 160,sides: 5,radius: 80,fill: "rgba(0,200,0, 0.5)",stroke: "black"
});var hexagon = new Konva.RegularPolygon({x: 350,y: 120,sides: 6,radius: 80,fill: "rgba(0,0,200, 0.5)",stroke: "black"
});var octagon = new Konva.RegularPolygon({x: 450,y: 275,sides: 8,radius: 100,fill: "rgba(200,200,0, 0.5)",stroke: "black"
});layerA.add(triangle, square, pentagon, hexagon, octagon);stage.add(layerA);

最后的想法

在本教程中,我们介绍了Konva允许我们轻松在画布上绘制的最基本形状。 我们还了解了可用于控制所有这些形状的外观的不同属性。 大多数属性对于所有形状都是通用的,但是其中一些属性仅适用于特定形状。

如有任何疑问,请在评论中让我知道。 在本系列的下一个教程中,我们将学习一些更复杂的形状。

翻译自: https://code.tutsplus.com/tutorials/manipulating-html5-canvas-using-konva-part-2-basic-shapes--cms-29830

使用Konva操纵HTML5画布:第2部分,基本形状相关推荐

  1. 使用Konva操纵HTML5画布:第3部分,复杂的形状和精灵

    在本系列的第二篇教程中,您学习了如何使用Konva绘制基本形状 . 您可以以一种或另一种方式组合基本形状以创建星形,环形,箭头,钟形或小屋. Konva还允许您使用库提供的内置函数来创建一些常见的复杂 ...

  2. html5 矢量图形插件,HTML5画布矢量图形?

    有几个选项.我没有使用这些图书馆,但从我可以告诉蛋糕似乎一般更令人印象深刻,并进口,虽然也是三倍大.还有Burst Engine,目前是processing.js的扩展,它甚至更小.我肯定有更多的在那 ...

  3. html5画布显示不出来,运行后html5画布没出来

    源自:3-9 使用前端界面调用flask发布的ckpt模型(2) 运行后html5画布没出来 不知道什么原因, 运行后html5画布没出来,跪求解答,谢谢 FLASK_APP = main.py FL ...

  4. 使用HTML5画布实现的超棒javascript动画仪表板:gauge.js

    日期:2012-8-8  来源:GBin1.com 在线演示 今天我们分享来自guage.js的超棒动画仪表板实现,这个类库使用html5画布来生成动态的自定义仪表板.不依赖于任何类库也不实用任何的C ...

  5. HTML5画布(CANVAS)速查简表

    >HTML5画布(Canvas)元素 <canvas id="myCanvas" width="500" height="300" ...

  6. html5数据提交到mysql,保存html5画布作为数据到mysql数据库

    这可能是不可能的,它只是非常适合我的情况.我使用html5画布作为幻灯片演示者,用户可以使用它并将其保存到本地机器上.保存html5画布作为数据到mysql数据库 我的目标是改为以某种不同的方式将其保 ...

  7. HTML5画布如何设置线的样式?

    在画布中,默认线的颜色为黑色,宽度为1像素,但我们可以使用相应的方法为线添加不同的样式.下面将从宽度.描边颜色.端点形状三方面详细讲解线样式的设置方法. 1.宽度 使用画布中的lineWidth属性可 ...

  8. html5仪表板可调节,使用HTML5画布实现的超棒javascript动画仪表板:gauge.js

    今天我们分享来自guage.js的超棒动画仪表板实现,这个类库使用html5画布来生成动态的自定义仪表板.不依赖于任何类库也不实用任何的CSS或者图片,完全使用画布生成. 拥有两套不同的UI,一个是仪 ...

  9. 表盘时针的html代码,html5画布操作的简单学习-简单时钟

    html5画布操作的简单学习-简单时针 效果图 一.什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. ...

最新文章

  1. zynq7000 clk 设备树时钟对照表
  2. bmp类型转成Halcon的Hobject类型
  3. wxWidgets:wxRichTextFieldTypeStandard类用法
  4. python人人贷爬虫_爬取人人贷网上部分借贷信息以及数据可视化
  5. Sorting It All Out (易错题+拓扑排序+有向图(判环+判有序)优先级)
  6. 【原创】请不要对Boost Format使用Byte作为参数
  7. 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
  8. 贴吧粉丝怎么全部移除_亚马逊FBA怎么发货?怎么把货发到FBA仓库?
  9. 『原创经典』标准日本语初级笔记完整版(1)
  10. 中国微电网市场趋势报告、技术动态创新及市场预测
  11. 耗时一个月,总结的Linux C++后台开发学习路线(已签腾讯sp,附学习资料)
  12. 华为交换机路由器密码重置笔记
  13. 球半足球分析,瑞典超:哥德堡 VS 代格福什 7月5日
  14. c语言做搬山游戏,C语言实现搬山小游戏,适合新手的项目实战,超易上手!
  15. 微信云服务器发长视频朋友圈,今天才知道,微信朋友圈还能发5分钟长视频,超简单,一看就会...
  16. 破解明星网红带货易翻车的方法——企业直播
  17. 明星热图|童瑶、万茜、周冬雨、宁静、吴昕、宋威龙、李荣浩等签约新品牌...
  18. 2020年我国知识产权服务业市场现状分析,区域发展不平衡、地域性强「图」
  19. TVS管防护电路的典型应用原理,这些你必须了解
  20. 指尖轻舞桌面:Slide On Desk - 在线使用指引

热门文章

  1. vue-cli3.0 vue打包部署非根目录时,静态资源图片路径错误
  2. 数据库学习第五节表的修改和删除
  3. 创建空的vue项目,完整详细步骤
  4. Element el-rate 评分组件详解
  5. 机器学习之正则化(Regularization)
  6. 【粉丝专享福利】联合6大博主送出18本ChatGPT扫盲教程实体书,文末有惊喜
  7. 第二篇 关于BMP图像
  8. 为什么说大众点评是大数据网站
  9. 新网域名查询和注册API接口类
  10. Nginx配置文件下载