Antd G6实现自定义工具栏

这篇具有很好参考价值的文章主要介绍了Antd G6实现自定义工具栏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

antd g6,图谱可视化,前端,图谱可视化,知识图谱,Antv G6,G6工具栏antd g6,图谱可视化,前端,图谱可视化,知识图谱,Antv G6,G6工具栏antd g6,图谱可视化,前端,图谱可视化,知识图谱,Antv G6,G6工具栏antd g6,图谱可视化,前端,图谱可视化,知识图谱,Antv G6,G6工具栏antd g6,图谱可视化,前端,图谱可视化,知识图谱,Antv G6,G6工具栏antd g6,图谱可视化,前端,图谱可视化,知识图谱,Antv G6,G6工具栏antd g6,图谱可视化,前端,图谱可视化,知识图谱,Antv G6,G6工具栏antd g6,图谱可视化,前端,图谱可视化,知识图谱,Antv G6,G6工具栏antd g6,图谱可视化,前端,图谱可视化,知识图谱,Antv G6,G6工具栏

<div v-if="graphState.showTool" class="toolbar">
            <a-tooltip title="展开/收起" color="geekblue" placement="right">
              <div class="inactiveTool">
                <MenuUnfoldOutlined
                  v-if="graphState.collapse"
                  style="font-size: 20px"
                  @click="
                    () => {
                      graphState.collapse = !graphState.collapse;
                    }
                  "
                />
                <MenuFoldOutlined
                  v-else
                  style="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">
                <div
                  code="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">
                <div
                  code="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-popover
                title="布局方案"
                placement="right"
                @visibleChange="handleChangeVisibleLayout"
              >
                <template #content>
                  <a-radio-group
                    v-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自行实现。这里只简述思路和原理。文章来源地址https://www.toymoban.com/news/detail-823114.html

到了这里,关于Antd G6实现自定义工具栏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CKEditor5+vue3使用以及如何添加新工具栏,自定义设置字体fontFamily

    官网地址:https://ckeditor.com/ckeditor-5/online-builder/ 官网提供了以下几种模式,一般使用经典模式居多,具体差别可访问官网自己试一下。 基本的使用方法(经典模式),先别急着操作,看完再决定使用哪种方法。 代码 效果如图 以上基本的工具栏配置比较少,如果基本的满足你的

    2024年02月10日
    浏览(48)
  • Qt之菜单栏、工具栏、状态栏介绍及工具栏QAction的动态增删显示实现方式

    目的 端应用程序或者编辑器基本都支持工具栏快捷功能的动态增删,即通过在菜单栏上打钩就可以在工具栏上看到相应功能的快捷按钮,取消打钩则在工具栏上就移除了该功能的快捷按钮。那么Qt如何实现这个功能,本篇目的就是记录实现此功能的方法及思路。 效果 先看下

    2024年02月08日
    浏览(35)
  • 微信小程序,商城底部工具栏的实现

    效果演示:   前提条件: 去阿里云矢量图标,下载8个图标,四个黑,四个红,如图: 新建文件夹icons,把图标放到该文件夹,然后把该文件夹移动到该项目的文件夹里面。如图所示     app.json

    2024年02月15日
    浏览(29)
  • MFC 非线程创建模态化窗口 实现工具栏拓展

    1.1 在Dlg.h文件中声明变量和定义资源ID 1.2 在资源视图中导入Bitmap资源图片 可以在右击资源符号中查看具体ID值 1.3 在Dlg.cpp文件中的OnInitDialog()方法中导入Bitmap与按钮ID 1.4 开启鼠标停靠信息提示 先在Dlg.h中增加函数声明 再Dlg.cpp中实现 增加消息映射宏开启提示 1.5 效果呈现 2.

    2024年02月10日
    浏览(26)
  • [QT编程系列-7]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义工具栏、状态栏、快捷键、图标

    目录 3. QT窗体设计 3.2 自定义工具栏 3.2.1 目标 3.2.2 实现过程 3.2 自定义状态栏 3.2.1  目标 3.2.2  过程 3.3 自定义动作快捷键 3.4 自定义图标 在Qt中,ToolBar(工具栏)是一种常见的GUI元素,用于提供应用程序的常用工具按钮和操作。工具栏通常包含一系列图标按钮,用于执

    2024年02月15日
    浏览(39)
  • 【react + antd】antd如何自定义请求使用antd的upload组件实现图片上传且可预览可删除

    官网给出的案例无法使用封装好的请求方式上传图片,以及 无法满足上传图片后获取接口url、名称等信息的的业务需求 。这个时候需要用到customRequest这个api。 但是很遗憾,官网没有给出具体案例。 不过——博主自己试出来了( ̄︶ ̄) 要使用upload,特别重要的属性就是file

    2024年02月17日
    浏览(37)
  • AntV G6自定义节点(多边形+图片)

    要求:拓扑节点根据不同的设备类型显示不同的图标,且根据设备状态显示不同的背景色,鼠标点击选中节点还可高亮 不同设备不同图标,不同状态不同背景色 鼠标点击选中节点高亮

    2024年02月09日
    浏览(30)
  • G6绘制树形图(自定义节点、自定义边、自定义布局)

    在 registerNode 中定义所有的节点 为了使用内置的布局方式,选择参数为 ‘tree-node’ 树节点类型,数据格式可以存在children子节点,效果自动生成子树 cfg 可以拿到数据,如cfg.id、cfg.name 使用 group.addShape(‘rect’, {}) 定义节点 rect 配置参数:https://antv-g6.gitee.io/zh/docs/api/shapeProp

    2024年02月05日
    浏览(26)
  • antv/g6 交互与事件及自定义Behavior

    在 G6 中,提供了直接的单机事件、还有监听时机的方法。可以监听画布、节点、边、以及各函数被调用的时机等: 1. 绑定事件 要绑定事件,首先需要获得图表实例( Graph 实例),然后使用 on 方法来绑定事件。 分为三类:全局事件、canvas事件、节点/边/combo事件; eventName 是

    2024年02月04日
    浏览(27)
  • 【IntelliJ IDEA】怎么调整工具栏的工具图标,比如在工具栏显示git push按钮

    演示版本为2019.1.1 想调整一下IDEA的工具栏图标,但是搜了一下,都感觉说的不是很完整,或者跟着步骤却没有任何效果,以下是个人使用的一些经验,希望可以帮到你 如果你是想在View - ToolBar中的工具栏添加按钮,也就是这一栏 比如我的git 原本是没有push按钮的,该怎么添加

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包