canvas实战系列一(Konva实现基本流程图)

一、建设背景

    由于一个项目上需要实现在系统中展现整体流程图,并可以根据不同颜色显示不同节点的完成状态,且节点可以点击进去查看节点详情。具体流程图如下:

二、实现思路

    一开始是想通过原始canvas,封装画圆圈,画矩形,画箭头等方法,然后建立坐标系去实现,后来经过实践,发现图形绘制是可以做到,但是事件处理比较棘手,最后还是放弃使用原生canvas,选择使用canvas库来实现,经过评估选择,最后选择Konva.js库。Konva.js 是一个用于HTML5 Canvas的强大JavaScript库,它使得在网页上创建交互式Canvas应用变得更加简单。它支持各种基础元素的创建,且支持拖拽以及各种鼠标事件的响应处理。

三、Konva.js 基本使用

①、引入Konva.js库:首先,你需要在你的HTML文件中引入Konva.js库。你可以从官方网站下载Konva.js,也可以通过链接引入。

 <script src="https://unpkg.com/konva@4.0.18/konva.min.js"></script>

②、创建Canvas容器:在HTML文件中创建一个容器用于放置Konva.js绘制的图形。

 <div id="container"></div>

③、编写JavaScript代码:使用Konva.js创建和管理图形对象。

      var width = window.innerWidth;
      var height = window.innerHeight;

      var stage = new Konva.Stage({
        container: 'container',
        width: width,
        height: height
      });

      var layer = new Konva.Layer();

      var rect1 = new Konva.Rect({
        x: 20,
        y: 20,
        width: 100,
        height: 50,
        fill: 'green',
        stroke: 'black',
        strokeWidth: 4
      });
      // add the shape to the layer
      layer.add(rect1);

      stage.add(layer);

四、具体实现

①、创建html容器及样式

<style>
  body {
    margin: 0;
    box-sizing: border-box;
    width: 100vw;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .parentBox {
    width: 80%;
    height: 80vh;
    border: 2px solid #aaa;
  }
</style>
 <div class="parentBox" id="parentBox">
   <div id="container"></div>
 </div>

②、封装节点和节点名称方法(可以定义不同颜色参数,文本,以及文本换行行数,文字上下) 

function titleCircle(clayer, x, y, fillColor, title, textWidth, isup, rows) {
  var complexCircle = new Konva.Circle({
    x: x,
    y: y,
    radius: cwidth,
    fill: fillColor,
    stroke: 'black',
    strokeWidth: 1
  })
  complexCircle.name(title)
  var textX = x - textWidth / 2
  var textY = y + 12
  if (isup) {
    textY = y - 14 * (rows + 1)
  }
  var complexText = new Konva.Text({
    x: textX,
    y: textY,
    text: title,
    fontSize: 10,
    fontFamily: 'sans-serif',
    lineHeight: 1.2,
    fill: '#000',
    width: textWidth,
    padding: 4,
    align: 'center'
  })

  clayer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值