GoJs分组绘图模板go.Group使用示例详解

 更新时间:2023年05月05日 10:29:50   作者:沅芷湘兰  
这篇文章主要为大家介绍了GoJs分组绘图模板go.Group使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

在可视化图形中,很多的节点和连线都有某一个特征或者属于某些分类,为了在使用可视化图形的时候更加直观的看出相同类型节点的集合,我们就会用到分组的绘图模板。

Group的使用

//data
nodes: [
    {
      key: "1",
      text: "三国人物志",
      isGroup: true
    },
    {
      key: "1-1",
      text: "魏",
      group: "1",
      isGroup: true
    },
    {
      key: "1-1-1",
      text: "曹丕",
      group: "1-1",
    },
    {
      key: "1-2",
      text: "蜀",
      group: "1",
      isGroup: true
    },
    {
      key: "1-2-1",
      text: "刘备",
      group: "1-2",
    },
    {
      key: "1-3",
      text: "吴",
      group: "1",
      isGroup: true
    },
    {
      key: "1-3-1",
      text: "孙权",
      group: "1-3",
    },
  ],
  links: [
  ],
  //methods
  this.myDiagram = $$(go.Diagram, "myDiagramDiv", {
  });
  this.myDiagram.nodeTemplate = $$(
    go.Node,
    "Horizontal",
    $$(go.TextBlock,{background:"#67B73C"},new go.Binding("text", "text")),
  );
  this.myDiagram.model = new go.GraphLinksModel(this.nodes, this.links);

可以看出通过group字段来判断自己这个节点属于哪个组,然后用isGroup来判断该对象是一个组,而不是一个普通节点。这些组成员之间的关系又构成了一个树形结构,这让我们很方便的分析这些成员之间的关系。

Group的属性

handlesDragDropForMembers//是否可以监听子组的拖拽
isSubGraphExpanded//是否显示组内的其他节点
ungroupable//是否可以解除对应组的的分类
wasSubGraphExpanded//是否可以折叠展开组

handlesDragDropForMembers、isSubGraphExpanded属性

handlesDragDropForMembers属性是设置是够允许组内的节点的拖拽的事件冒泡到组中,如果设置为true。则需要对组内的节点设置mouseDragEnter、mouseDragleave、mouseDrop来分别处理拖拽过程中对应的拖拽事件。这些放到后面事件的方法中详细解析。

isSubGraphExpanded属性

isSubGraphExpanded属性是设置是否显示组内的其他节点,默认为true,显示组内的其他节点。可以使用myDiagram上的groupTemplate做一些简单的配置看一下对应的效果。

this.myDiagram.groupTemplate = $$(
        go.Group,
        "Auto",
        {
          isSubGraphExpanded: false,
        },
        $$(go.Shape, "Rectangle", { fill: null, stroke: "#67B73c" }),
        $$(
          go.Panel,
          "Table",
          $$(
            go.TextBlock,
            {
              row: 0,
              column: 1,
              stroke: "#FF9900",
              textAlign: "center",
              stretch: go.GraphObject.Horizontal,
            },
            new go.Binding("text")
          )
        )
      );

由此可以看出设置isSubGraphExpanded为false会把所有的组进行折叠。

ungroupable、wasSubGraphExpanded属性

ungroupable属性是设置是否可以解除对应的组,默认为false。可以根据自己的需求去设置不同的属性。wasSubGraphExpanded属性设置是否可以展开和折叠组,我们可以对上面的组进行一些拓展,就是下面这个样子

this.myDiagram.groupTemplate = $$(
    go.Group,
    "Auto",
    {
      wasSubGraphExpanded:true,
    },
    $$(go.Shape, "Rectangle", { fill: null, stroke: "#67B73c" }),
    $$(
      go.Panel,
      "Table",
      $$("SubGraphExpanderButton", { row: 0, column: 0, margin: 3 }),
      $$(
        go.TextBlock,
        {
          row: 0,
          column: 1,
          stroke: "#FF9900",
          textAlign: "center",
          stretch: go.GraphObject.Horizontal,
        },
        new go.Binding("text")
      ),
      $$(
        go.Placeholder,
        { row: 1, columnSpan: 2, padding: 10, alignment: go.Spot.TopLeft },
        new go.Binding("padding", "isSubGraphExpanded", function (exp) {
          return exp ? 10 : 0;
        })
      )
    )
  );

然后图形就变成了这样,通过SubGraphExpanderButton按钮可以控制不同的组的折叠和显示。

结语

在真正的开发过程中,一般遇到这种分组的情况比较少,但是gojs还是提供了组的绘图模板供我们使用。也是拓展了很多可视化图形的显示空间

以上就是GoJs分组绘图模板go.Group使用示例详解的详细内容,更多关于GoJs分组绘图模板Group的资料请关注脚本之家其它相关文章!

相关文章

  • js实现仿爱微网两级导航菜单效果代码

    js实现仿爱微网两级导航菜单效果代码

    这篇文章主要介绍了js实现仿爱微网两级导航菜单效果代码,通过javascript自定义函数结合鼠标点击事件实现tab切换的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • uni-app瀑布流效果实现方法

    uni-app瀑布流效果实现方法

    Uni-app是一个基于Vue.js开发跨平台应用的框架,它可以将代码编译成多个平台下的原生应用,这篇文章主要给大家介绍了关于uni-app瀑布流效果的相关资料,需要的朋友可以参考下
    2023-12-12
  • JS中异常抛出和处理方法图文详解

    JS中异常抛出和处理方法图文详解

    JavaScript和其他语言一样,都拥有捕获异常的机制,下面这篇文章主要给大家介绍了关于JS中异常抛出和处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • HTML页面,测试JS对C函数的调用简单实例

    HTML页面,测试JS对C函数的调用简单实例

    下面小编就为大家带来一篇HTML页面,测试JS对C函数的调用简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • TypeScript条件类型与内置条件类型超详细讲解

    TypeScript条件类型与内置条件类型超详细讲解

    我们可以使用TypeScript中的条件类型来根据逻辑定义某些类型,就像是在编写代码那样。它采用的语法和我们在JavaScript中熟悉的三元运算符很像:condition ? ifConditionTrue : ifConditionFalse。我们来看看他是怎么工作的
    2023-03-03
  • JavaScript代码生成PDF文件的方法

    JavaScript代码生成PDF文件的方法

    如何使用js生成pdf文件呢,下面通过本文给大家分享JavaScript代码生成PDF文件的方法,需要的朋友参考下吧
    2016-02-02
  • 有趣的JavaScript隐式类型转换操作实例分析

    有趣的JavaScript隐式类型转换操作实例分析

    这篇文章主要介绍了JavaScript隐式类型转换操作,结合实例形式分析了JavaScript隐式类型转换操作相关实现技巧与注意事项,需要的朋友可以参考下
    2020-05-05
  • 轻松实现js选项卡切换效果

    轻松实现js选项卡切换效果

    这篇文章主要帮助大家轻松实现js选项卡切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • JS加密插件CryptoJS实现的DES加密示例

    JS加密插件CryptoJS实现的DES加密示例

    这篇文章主要介绍了JS加密插件CryptoJS实现的DES加密,结合实例形式分析了javascript使用CryptoJS插件进行des加密的各种常见模式使用技巧,需要的朋友可以参考下
    2018-08-08
  • 微信小程序 wepy框架与iview-weapp的用法详解

    微信小程序 wepy框架与iview-weapp的用法详解

    这篇文章主要介绍了微信小程序 wepy框架与iview-weapp的用法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04

最新评论