当前位置: 首页 > news >正文

vue canvas绘制信令图二、

需求:根据信令图标题的每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 {// 有向右数据说明是正常gaptrueGap = 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、全部代码如下:

<template><vxe-modal v-model="sigModal" :title="titles" ref="vxeModal2" :width="modalWidth > 1200 ? modalWidth : 1200" min-width="1200" :height="dialogHeight" :position="{ top: '3vh'}" @close="closeEvent" resize destroy-on-close><div ref="screen" class="canvasContain"><canvas id="myCanvas">你的浏览器还不支持canvas</canvas></div><!-- 倒计时提示 message --><div id="message-container" v-if="showMess"><div class="message move-in"><span class="icon icon-success"> </span><div class="text"> 信令图上传成功,<span style="font-weight: bold;">{{ `${ this.count } ` }}</span>  秒后自动关闭 </div><div class="close"><el-button type="text" @click="closeMessage">取消</el-button></div></div></div></vxe-modal>
</template><script>
import html2canvas from 'html2canvas'
import { DownLoadFromTime } from '@/utils/times.js'
import { get_signallInfo } from '@/api/c3/offlineImportant.js'
import axios from 'axios'
export default {data() {return {showMess: false,count: 3,timer: null,uploadId: '',			titles: '生成信令图',dialogWidth: '90%',dialogHeight: '92%',sigModal: false,// 'ATP'-----'MT'------------ 'BTS'-------'BSC'----'MSC'------ 'RBC'//   Igsmr-R   Um_AMS/Um_BMS      Abis           A      PRIresultTitle: [], // 后台返回的随机顺序titleresultTitleTypeArr: ['ATP', 'MT', 'BTS', 'BSC', 'MSC', 'RBC'],showTitleArr: []

相关文章:

  • Crosslink-NX器件应用连载(10): 图像输入并通过HDMI输出
  • 前端面试问题:子组件的某一个方法调用执行逻辑由父组件的属性状态变化来决定
  • .vimrc 配置项
  • Golang反射
  • Android Notes
  • ORA-08189: 因为未启用行移动功能, 不能闪回表问题
  • leetcode及牛客网二叉树相关题、单值二叉树、相同的树、二叉树的前序、中序、后序遍历、另一棵树的子树、二叉树的遍历等的介绍
  • Presto 从提交SQL到获取结果 源码详解(3)
  • qt+ffmpeg 实现音视频播放(四)之音视频同步
  • k8s——Pod进阶(资源限制和探针)
  • 解决 Git commit 或 Git merge 跑到 VIM 里面去了
  • C#中的数组探索
  • C#面:.Net中会存在内存泄漏吗,请简单描述
  • python数据库操作
  • 校园导航系统C++
  • 【技术性】Search知识
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Java反射-动态类加载和重新加载
  • js算法-归并排序(merge_sort)
  • Node 版本管理
  • passportjs 源码分析
  • React系列之 Redux 架构模式
  • SAP云平台里Global Account和Sub Account的关系
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Vue 动态创建 component
  • Vue.js源码(2):初探List Rendering
  • Xmanager 远程桌面 CentOS 7
  • 用简单代码看卷积组块发展
  • 原生 js 实现移动端 Touch 滑动反弹
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 阿里云服务器购买完整流程
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #1015 : KMP算法
  • #APPINVENTOR学习记录
  • #include
  • #数学建模# 线性规划问题的Matlab求解
  • (1)(1.9) MSP (version 4.2)
  • (20050108)又读《平凡的世界》
  • (libusb) usb口自动刷新
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)appium-desktop定位元素原理
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)ObjectiveC 深浅拷贝学习
  • (转)Oracle存储过程编写经验和优化措施
  • (转)大型网站的系统架构
  • ***原理与防范
  • .equals()到底是什么意思?
  • .gitattributes 文件
  • .net core + vue 搭建前后端分离的框架
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net mvc 获取url中controller和action