vue canvas绘制信令图二、

本文介绍如何在Vue.js中利用canvas绘制信令图,重点在于根据标题内容调整区域间隔,实现无内容区域间隔小,有内容区域间隔大的效果。详细步骤包括设置初始间隔、计算坐标、判断标题数据、绘制虚线、箭头处理及完整代码展示。
摘要由CSDN通过智能技术生成

需求:根据信令图标题的每2个区域之间有无内容来给宽度,无内容区域的间隔要小一些。有内容区域的间隔大一些。


先上效果图:

从上面的效果图可以看出无内容区域的间隔宽度变小了很多。

1、先设置一个最先间隔的宽度:minGapX: 200,


2、然后设置一个 存放有计算后的间隔数据: titleAttrArr: []

3、 测算出坐标点离最左边的距离 

this.titleAttrArr = []
let offsetLeft = 0

4、标题title没有向右数据, 还得判断它的下一级有没有向左数据

let index = this.resultData.findIndex(
   (item) => item.startDataDir == v && item.dataDirStr === "上行"
 );
if (index === -1) {
   // title没有向右数据, 还得判断他的下一级有没有向左数据
   let index2 = this.resultData.findIndex(
    (item) =>
        item.startDataDir == this.showTitleArr[i + 1] && item.dataDirStr === "下行"
    );
   if (index2 === -1) {
       trueGap = this.minGapX;
    } else {
       trueGap = this.gapX;
    }
 } else {
   // 有向右数据说明是正常gap
   trueGap = this.gapX;
 }

5、画虚线和标题  以及对应方法里面的调整

 this.paintText(context, v, i, offsetLeft);
 this.drawDashed(context, i, offsetLeft);

6、画箭头的处理

        let kOffsetLeft = 0,
          jOffsetLeft = 0;
        this.titleAttrArr.map((item) => {
          if (v.startDataDir === item.titleName) {
            kOffsetLeft = item.offsetLeft;
          }
          if (v.endDataDir === item.titleName) {
            jOffsetLeft = item.offsetLeft;
          }
        });
        // 箭头
        this.paintArr(
          v,
          [kOffsetLeft + this.paddingLeft, height],
          [jOffsetLeft + this.paddingLeft, height],
          kOffsetLeft < jOffsetLeft ? "right" : "left",
          context
        );

7、源代码地址:https://download.csdn.net/download/qq_41646249/89428280

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT博客技术分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值