Antd G6实现自定义工具栏

       在使用g6实现知识图谱可视化中,产品经理提出了有关图谱操作的不少功能,需要放置在工具栏中,其中有些功能不在g6自带的功能里,且工具栏样式、交互效果也和官方自定义工具栏不同。那我们怎么去实现呢?

        g6官方的工具栏案例是这样:G6,提供了“重做”,”撤销“,”放大“,”缩小“,”适应屏幕“,”实际大小“的操作,配置项中也提供了有关样式及操作的回调功能,但是,远不能满足我们产品需要的样式及功能。

        产品的需求中,工具栏各操作需要有激活和未激活的效果,悬浮的效果等等。操作除了官方工具栏自带的操作,还需”高亮“,”鱼眼放大镜“,”布局“,”下载“,”关系标签显隐“的功能。

       那我们就给工具栏换个新包装吧!话不多说,看效果,上代码。

<div v-if="graphState.showTool" class="toolbar"><a-tooltip title="展开/收起" color="geekblue" placement="right"><div class="inactiveTool"><MenuUnfoldOutlinedv-if="graphState.collapse"style="font-size: 20px"@click="() => {graphState.collapse = !graphState.collapse;}"/><MenuFoldOutlinedv-elsestyle="font-size: 20px"@click="() => {graphState.collapse = !graphState.collapse;}"/></div></a-tooltip><a-space v-show="!graphState.collapse" direction="horizontal"><a-tooltip title="放大" color="geekblue" placement="right"><divcode="zoomOut":class="graphState.activeTool == 'zoomOut' ? 'activeTool' : 'inactiveTool'"><ZoomInOutlined @click="handleClickTool('zoomOut')" style="font-size: 20px" /></div></a-tooltip><a-tooltip title="缩小" color="geekblue" placement="right"><divcode="realZoom":class="graphState.activeTool == 'zoomIn' ? 'activeTool' : 'inactiveTool'"><ZoomOutOutlined @click="handleClickTool('zoomIn')" style="font-size: 20px" /></div></a-tooltip><a-tooltip title="自适应" color="geekblue" placement="right"><div :class="graphState.activeTool == 'realZoom' ? 'activeTool' : 'inactiveTool'"><OneToOneOutlined @click="handleClickTool('realZoom')" style="font-size: 20px" /></div></a-tooltip><a-tooltip title="视图居中" color="geekblue" placement="right"><div:class="graphState.activeTool == 'autoZoom' ? 'activeTool' : 'inactiveTool'"style="font-size: 20px"><PicCenterOutlined @click="handleClickTool('autoZoom')" style="font-size: 20px" /></div></a-tooltip><a-tooltip title="高亮相邻节点" color="geekblue" placement="right"><div :class="graphState.activeTool == 'relation' ? 'activeTool' : 'inactiveTool'"><DeploymentUnitOutlined@click="handleClickTool('relation')"style="font-size: 20px"/></div></a-tooltip><a-tooltip title="鱼眼放大镜" color="geekblue" placement="right"><div :class="graphState.activeTool == 'fishEye' ? 'activeTool' : 'inactiveTool'"><EyeOutlined @click="handleClickTool('fishEye')" style="font-size: 20px" /></div></a-tooltip><a-popovertitle="布局方案"placement="right"@visibleChange="handleChangeVisibleLayout"><template #content><a-radio-groupv-model:value="graphState.layout.type"@change="handleChangeLayout"><div><a-radio value="AI" :disabled="graphState.nodes.length >= 100">多边散列排布(少量数据推荐)</a-radio></div><div><a-radio value="gForce">gForce力导向布局</a-radio></div><div><a-radio value="force2">基础力导向布局</a-radio></div><div v-show="false"><a-radio value="fruchterman">Fruchterman布局</a-radio></div></a-radio-group></template><div :class="graphState.activeTool == 'layout' ? 'activeTool' : 'inactiveTool'"><LayoutOutlined style="font-size: 20px" /></div></a-popover><a-tooltip title="导出图片" color="geekblue" placement="right"><div :class="graphState.activeTool == 'download' ? 'activeTool' : 'inactiveTool'"><DownloadOutlined @click="handleClickTool('download')" style="font-size: 20px" /></div></a-tooltip><a-tooltip title="关系标签显隐" color="geekblue" placement="right"><div:class="graphState.activeTool == 'relationVisible' ? 'activeTool' : 'inactiveTool'"><ArrowRightOutlined@click="handleClickTool('relationVisible')"style="font-size: 20px"/></div></a-tooltip></a-space></div>

        上述代码中,我们根据业务需求做了工具栏整体的显示隐藏,展开收起,关系显隐,图片下载等功能。工具栏面板我们可以根据自己系统使用的组件库,ant design 、element ui或者其他。添加图标,提示框,选中等效果。这里不多赘述。

        那么,怎么将g6的功能添加到我们工具栏上面使用呢?

        我们定义了一组响应式对象,用来存储当前激活的工具或效果。

const graphState = reactive({layout: {type: 'force2',advanceWeight: false,damping: 0.8,kr: 1000,preset: {minNodeSpacing: 10,nodeSize: 10,type: 'concentric',},clustering: true,animate: false,preventOverlap: true,clusterNodeStrength: 35,distanceThresholdMode: 'max',minMovement: 10,maxSpeed: 1000,linkDistance: 50,edgeStrength: 200,nodeStrength: 1000,nodeWeightFieldScale: 1,nodeWeightFromType: 'node',fitCenter: true,},showTool: false,activeTool: '',  //当前激活的工具enableFishEye: false, //是否启用鱼眼放大镜relation: false, //是否开启高亮相邻节点enableLegend: false, //是否开启图例relationVisible: true, //关系标签显示隐藏collapse: false,  //展开或折叠工具栏});

           引入G6,定义graph,用来初始化G6实例,再初始化G6的工具栏 

import G6 from '@antv/g6';
let graph;
let toolbar = new G6.ToolBar({className: 'g6-component-toolbar',});

         通过动态的给graph 实例添加插件、添加行为动作,达到调用工具栏功能的目的。

const handleClickTool = code => {if (toolbar.destroyed) {toolbar = new G6.ToolBar({className: 'g6-component-toolbar',});graph.addPlugin(toolbar);}if (code === 'zoomOut') {toolbar.zoomOut();//...} else if (code === 'zoomIn') {toolbar.zoomIn();//...} //...graph.fitCenter();graphState.activeTool = code;};

           其他功能实现读者可查询G6官网API自行实现。这里只简述思路和原理。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel如何加密(excel加密的三种方法)

Excel是一款广泛使用的办公软件&#xff0c;有时候我们需要对一些重要的Excel文件进行加密&#xff0c;以保证文件的安全性。下面将介绍3种常用的Excel加密方法。 方法一&#xff1a;通过路径文件-另存为-工具-常规选项-设置打开或修改权限密码&#xff08;密码只可以使数字、字…

从0开始python学习-34.pytest常用插件

目录 1. pytest-html&#xff1a;生成HTML测试报告 2.pytest-xdist&#xff1a;并发执行用例 3. pytest-order&#xff1a;自定义用例的执行顺序 4. pytest-rerunfailures&#xff1a;用例失败时自动重试 5. pytest-result-log:用例执行结果记录到日志文件 1. pytest-html…

Nacos热更新

Nacos热更新 相比其他注册中心&#xff0c;Nacos的优势之一在于热更新。 热更新&#xff0c;就是不需要重启服务&#xff0c;就能够更新配置。 nacos配置中心 首先&#xff0c;需要搭建 Nacos&#xff0c;详情见&#xff1a; https://www.cnblogs.com/expiator/p/17392549.h…

Docker本地部署Drupal并实现公网访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。它的学习…

数据管理系统-week1-文件系统、数据库和数据库管理系统

文章目录 前言一、 文件系统文件系统的限制 二、 数据库系统三、 数据库管理系统参考文献 前言 一、 文件系统 对于更高级的数据处理应用程序来说&#xff0c;基于数据块的持久存储逻辑模型过于简单数据块序列被划分为称为文件的数据块的可变子序列&#xff0c;与文件相关的名…

键盘打字盲打练习系列之认识键盘——0

一.欢迎来到我的酒馆 盲打&#xff0c;yyds&#xff01; 目录 一.欢迎来到我的酒馆二.键盘规格三.键盘分区 二.键盘规格 经常看视频&#xff0c;看到别人在键盘上一通干净利索的操作&#xff0c;就打出想要的文字。心里突然来一句&#xff1a;卧槽&#xff0c;打字贼快啊&#…

pytest全局变量的使用

这里重新阐述下PageObject设计模式&#xff1a; PageObject设计模式是selenium自动化最成熟&#xff0c;最受欢迎的一种模式&#xff0c;这里用pytest同样适用 这里直接提供代码&#xff1a; 全局变量 conftest.py """ conftest.py 全局变量&#xff0c;主要实…

AI:76-基于机器学习的智能城市交通管理

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

asp.net外卖网站系统VS开发mysql数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net外卖网站系统 是一套完善的web设计管理系统&#xff0c;系统采用mvc模式&#xff08;BLLDALENTITY&#xff09;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为mysql&#xff0c;使用c#语…

【Unity之UI编程】玩法面板的实现

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;UI_…

Spring Cloud和Kubernetes + Spring Boot 用哪个?

Spring Cloud和Kubernetes Spring Boot都是用于构建微服务架构的解决方案&#xff0c;它们各有优势和不足&#xff0c;选择哪个更好取决于你的具体需求和上下文。 Spring Cloud是一个基于Spring Boot的微服务开发框架&#xff0c;它提供了一套完整的微服务解决方案&#xff0…

OpenMMlab导出yolov3的onnx模型并推理

手动导出 直接使用脚本 import torch from mmdet.apis import init_detector, inference_detectorconfig_file ./configs/yolo/yolov3_mobilenetv2_8xb24-ms-416-300e_coco.py checkpoint_file yolov3_mobilenetv2_mstrain-416_300e_coco_20210718_010823-f68a07b3.pth mod…

Django(复习篇)

项目创建 1. 虚拟环境 python -m venv my_env ​ cd my_env activate/deactivate ​ pip install django ​2. 项目和app创建 cd mypros django-admin startproject Pro1 django-admin startapp app1 ​3. settings配置INSTALLED_APPS【app1"】TEMPLATES【 DIRS: [os.pat…

JavaEE初阶学习:Linux 基本使用和 web 程序部署

1.Linux的基本认识 Linux 是一个操作系统.(搞管理的系统) 和Windows都是同类产品~~ Linux 实际的场景: 1.服务器 2.嵌入式设备 3.移动端(手机)Android 其实就是Linux 1991年,还在读大学的 芬兰人 Linus Benedict Torvalds,搞了一个Linux 这样的系统0.01版,正式发布了~ 后…

数据结构-双向链表

目录 1.带头双向循环链表&#xff1a; 2. 带头双向循环链表的实现&#xff1a; 双向链表初始化&#xff1a; 双向链表打印&#xff1a; 开辟节点函数&#xff1a; 双向链表头插&#xff1a; 双向链表尾插&#xff1a; 双向链表头删&#xff1a; 双向链表尾删&#xff…

指标体系:洞察变化的原因

一、指标概述 指标体系是指根据运营目标&#xff0c;整理出可以正确和准确反映业务运营特点的多个指标&#xff0c;并根据指标间的联系形成有机组合。 指标体系业务意义极强&#xff0c;所有指标体系都是为特定的业务经营目的而设计的。指标体系的设计应服从于这种目的&#x…

【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第一弹)

一、已知一颗二叉树如下图&#xff0c;试求&#xff1a; (1)该二叉树前序、中序和后序遍历的结果。 (2)该二叉树是否为满二叉树&#xff1f;是否为完全二叉树&#xff1f; (3)将它转换成对应的树或森林。 (4)这颗二叉树的深度为多少? (5)试对该二叉树进行前序线索化。 (6)试对…

算法之双指针

双指针算法的作用 双指针算法是一种使用2个变量对线性结构(逻辑线性/物理线性)&#xff0c;进行操作的算法&#xff0c;双指针可以对线性结构进行时间复杂度优化&#xff0c;可以对空间进行记忆。 双指针算法的分类 1.快慢指针 2.滑动窗口 3.左右指针 4.前后指针 双指针OJ题目…

docker可视化

什么是portainer&#xff1f; portainer就是docker图形化界面的管理工具&#xff0c;提供一个后台面板供我们操作 目前先用portainer(先用这个)&#xff0c;以后还会用到Rancher(CI/CD在用) 1.下载portainer 9000是内网端口&#xff0c;8088是外网访问端口 docker run…

Linux文件系统(1)

Linux文件系统(1) &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容从系统层面重新认识我们的文件系统 文…