基于G6的弓字形流程图

news2024/12/26 11:38:28

需求

现在有个需求是类似于步骤条、流程图,但是节点比较多。
搜了很多类似组件,还是有各种问题。

尝试过的已有组件

一开始用的是element-ui自带的步骤条组件(下图所示),但是节点过多,宽度不够的时候,换行就是直接从新一行开始接上,但是这样节点一多就不美观,不够直观。
element-ui 效果

后面尝试用G6自带的一些例子做改动,但是G6的整体走向都是从左往右,或者从上往下扩展。也尝试过用Grid网格布局,但是有个bug怎么也弄不好。
bug:每次第一个节点都会跑到最后面,然后第二个节点放第一位,这样就会有一条线穿过了整个流程图。(所有的配置都是根据官方例子写的,还是有问题就很无语…)
在这里插入图片描述

组件

后面就只能是基于G6的基础上,固定节点大小,手动计算节点位置。
缺点:固定节点大小,有些标题很短的就会有很多空位,标题很长的就会超出节点大小

效果图

组件效果图

  • 深色的为已完成流程,灰色的为待办。
  • 因为是固定节点大小,为了预防节点标题过长,设置了标题超长部分用...截取,并设置了tooltip显示全部内容
  • 组件整体可以随窗口大小变化,每行显示的节点数量根据窗体大小自适应

实现

节点样式

因为是第一次接触 G6 组件,从官网找了个比较切合自己需求的自定义节点进行修改
在这里插入图片描述

tooltip

有时候会有这么个需求,要求鼠标悬浮的时候,显示该节点的详细内容

  • 一开始用的是内置的behavior的方法实现的
    在这里插入图片描述
    但是这里有个问题,tooltip 会出现偏移,无论怎么设置offset也没用。后面搜了很久都没有在网上找到类似的问题,就把这个认为又是自己写的代码的未解之谜…
    然后当我用了plugin这种方法实现的时候,意外搜到了出现类似问题的博客(点击可查看),但是没实验过不知道是否真的能解决

  • 插件 plugin
    后面直接用了官网给的例子,没有任何坑,功能正常~
    在这里插入图片描述

节点自适应

流程图自适应的效果,从另一个角度看就是每行显示的节点数量根据窗口大小进行变化。
在初始化G6组件的方法后,添加一个监听resize的方法,根据 G6 现有的宽度再除以节点大小,就可以直到一行有多少个节点。
先把现有的G6组件this.graph.destroy(),再重新初始化G6组件即可。

if (typeof window !== 'undefined') {
    window.onresize = () => {
        if (!this.graph || this.graph.get('destroyed')) return;
        if (!this.$refs.flowChart || !this.$refs.flowChart.scrollWidth || !this.$refs.flowChart.scrollHeight) return;

        let height = this.$refs.flowChart.offsetHeight, width = this.$refs.flowChart.offsetWidth;
        this.cols = Math.floor(width / 160);
        this.graph.destroy();
        this.initG6(this.list);
    };
}

一些奇奇怪怪的问题

  • 节点大小过小的时候,箭头会向下倾斜,如下图所示
    箭头倾斜效果
    解决方法:设置节点的连接点anchorPoints
    在这里插入图片描述
    将连接节点的边有可能接触到的点都添加到节点数据中,这样边就可以水平连接了
nodes: [
    {
      id: 'node1',
      label: 'node1',
      x: 100,
      y: 200,
      // 该节点可选的连接点集合,该点有两个可选的连接点
      anchorPoints: [
        [0, 1],
        [0.5, 1],
      ],
      type: 'rect',
    }
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/767093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

提升按钮效力:七大基本原则全面解析

按钮是交互设计中的基本元素。他们在用户和系统之间扮演重要角色。在本文中,我们将一起思考创建有效按钮所需了解的七个基本原则。 ⬇⬇⬇点击获取更多设计资源 https://js.design/community?categorydesign&sourcecsdn&planbbqcsdn768 让按钮看起来像按…

基于RASC的keil电子时钟制作(瑞萨RA)(1)----安装RASC

基于RASC的keil电子时钟制作_瑞萨RA_1安装RASC 概述硬件准备视频教程RA Smart Configurator软件下载RASC安装Keil下Renesas RA pack包安装 概述 RA Smart Configurator"是一种基于"灵活组合软件"概念的代码生成辅助工具。它可以自动生成微控制器的初始配置程序…

开源图片AI工具:推动计算机视觉领域的创新和合作

在当今数字化时代,人工智能技术的快速发展带来了许多令人兴奋的创新和应用。图片AI作为其中之一,为我们提供了全新的视觉体验和创作可能性。随着开源技术的推动,越来越多的图片AI工具被引入市场,为个人我们和开发者们带来了更多便…

Kafka消息监控管理工具Offset Explorer的使用教程

1、kafka监控管理工具 Offset Explorer是一款用于监控和管理Apache Kafka集群中消费者组偏移量的开源工具。它提供了一个简单直观的用户界面,用于查看和管理Kafka消费者组偏移量的详细信息。 Offset Explorer具有以下主要功能和特点: 实时监控&#x…

AVLTree深度剖析(单旋)

前言 二叉树搜索树是存在一定的缺陷问题的,当我们要插入的数据是有序,或者说接近于有序,,二叉搜索树及有可能退化为单支树,查找元素相当于在顺序表当中搜索元素,效率低下 --------------------------------…

LeetCode1657. 确定两个字符串是否接近

确定两个字符串是否接近 提示 中等 55 相关企业 如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 : 操作 1:交换任意两个 现有 字符。 例如,abcde -> aecdb 操作 2:将一个 现有 字符的每…

仓库管理软件有哪些功能?2023仓库管理软件该如何选?

对于现代企业或批发零售商,高效的仓库管理是确保供应链运作顺畅、库存控制精准的关键要素。在数字化时代,越来越多的企业和商户意识到采用仓库管理软件的重要性。 无论您是中小型企业还是中小商户,仓库管理都是不可忽视的一环。 一、选择仓库…

微信小程序开发闭到眼睛创建分包和详细解释

一、普通分包创建 1.介绍 说明:微信小程序分包是指将小程序的代码和资源按照一定规则分成多个包,减少首次加载时间,提高用户体验。分包可以有效减少小程序包的总大小,提高启动速度,减少首次加载时间。分包可以根据业…

实现小程序商城首页【源码公开】

效果图 页面源码 <view class"index-container"><view class"header"><!--搜索框【仅样式&#xff0c;不做处理】 start--><van-search bindtap"clickSearch" disabled shape"round" background"#9c7bf0&q…

在idea中搭建微服务项目(22版),详细教程

1.创建新的项目 2.创建的项目类型为SpringBoot 选择创建后再选择新建项目 3. 将新建的项目中不需要的东西都给删了,只留下pom文件即可 修改pom文件的版本 <version>2.1.6.RELEASE</version> 导入所需要的jar包,将原来<dependencies>中的依赖覆盖掉 <!-- …

10 卷积网络 convolutional networks

卷积 如果将图片从 H ∗ W ∗ C H*W*C H∗W∗C 拉伸到 N ∗ 1 N*1 N∗1 的维度&#xff0c;而参数矩阵又是 N ∗ M N*M N∗M 的大小。N很大&#xff0c;M也很大。整个网络中的参数量会变得巨大。 卷积过程&#xff0c;使用一个filter 在整个图片上滑动。 当然输入的图象可…

普通人决策正确率如何提升

简洁回复&#xff1a;非常非常非常难&#xff0c;几乎不能。 举个简单例子&#xff1a; 高考报志愿&#xff0c;能走到高考这一步的并取得成绩的&#xff0c;从幼儿园到高中&#xff0c;3633&#xff0c;这个赛道奔跑了15年。 大部分人这里指的是考生自己&#xff0c;花费在填…

Unity LayerMask原理和判断包含关系

在本文之前&#xff0c;请先了解全部位操作的含义&#xff0c;否则继续下去会很困难。 本质&#xff1a;32位整数的每一位表示一个层 LayerMask本质上是一个32位的整数(Int32 ,int)&#xff0c;每个位代表一个图层&#xff0c;因此LayerMask最多可以表示32个图层&#xff08;0…

Vue3组件间的通信方式

目录 1.props父向子组件通信 2.自定义事件 子向父组件通信 3.全局事件总线 4.v-model组件通信&#xff08;父子组件数据同步&#xff09; 绑定单个数据同步 绑定多个数据同步 5.useAttrs组件通信 6.ref与$parent ref获取子组件实例对象 $parent获取父组件实例对象 7.p…

大采购,助力提升国有企业采购供应链管理水平

2023年7月11日-12日&#xff0c;由中国物流与采购联合会主办、北京筑龙承办的主题为“数智赋能创新发展”的“第四届国有企业数智化采购与智慧供应链论坛”在北京盛大举行。来自中央企业、地方国企采购与供应链部门相关负责人、业界专家、行业媒体代表等齐聚一堂、共襄盛会。北…

HCIP第十二天

题目 拓扑图 sw1、sw2、sw3分别创建VLAN、划分接口&#xff0c;配置干道 VLAN间路由 所有PC通过DHCP获取IP地址 PC1/3可以正常访问PC2/4/5/6

【学会动态规划】解码方法(4)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

国内流行的数据可视化软件工具

在信息爆炸的时代&#xff0c;越来越多的数据堆积如山。但是&#xff0c;这些密集的数据没有重点且可读性较差。因此&#xff0c;我们需要数据可视化来帮助数据易于理解和接受。相比之下&#xff0c;可视化更直观、更有意义&#xff0c;使用适当的数据可视化工具来可视化数据非…

C++入门 - 1(几分钟让你快速入门C++)

c入门 1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4.缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.2 C支持函数重载的原理--名字修饰(name Mangling)提问&#xff1a;C语言中为什么没有函数重载呢&#xff1f; …

常见的网络拓扑结构,你都看懂吗

常见的网络拓扑结构有以下6种&#xff1a;1.总线型网络拓扑结构&#xff1b;2.星型网络拓扑结构&#xff1b;3.环形网络拓扑结构&#xff1b;4.树型网络拓扑结构&#xff1b;5.网状网络拓扑结构&#xff1b;6.混合网络型拓扑结构。其中&#xff0c;“总线型网络拓扑结构”是所有…