详解GoJs节点的折叠展开实现

目录
  • 前言
  • 节点折叠展开的不同情况
    • 树形布局特有的属性后代节点的折叠展开
    • go.Group(组)的内部元素的展开折叠
    • go.Panel(面板)的内部元素的展开折叠
  • 总结

前言

前面的文章中提到了提示信息(toolTip)在节点信息内容过多的时候,需要节点信息的内容进行隐藏,在鼠标移入的时候进行未显示信息的提示框形式的选中,本文讲从另外的角度处理在画布上的可视化图形的内容过多的时候的处理情况,一种是把节点的内部的折叠和展开,另外一种就是对部分节点进行折叠和展开。

节点折叠展开的不同情况

对于节点的折叠展开分几种情况。第一种是对于树形布局的特有属性可以对树形布局后代的节点进行一个折叠展开,第二种是前面文章提到的go.Group(组)go.Panel(面板)内部的内容也就是节点内部信息的折叠和展开。

树形布局特有的属性后代节点的折叠展开

this.myDiagram.nodeTemplate =
$$(go.Node, "Spot",
    $$(go.Panel, "Auto",
        $$(go.Shape, "Circle",
            { width: 30, height: 30},
            new go.Binding("fill", "color"),
            new go.Binding("figure", "figure"),
        ),
        $$(go.TextBlock,
            new go.Binding("text", "text")),
    ),
    $$("TreeExpanderButton",
    { alignment: go.Spot.Right, alignmentFocus: go.Spot.Left },
    )
);

因为属性布局的特殊性,有明确的父子关系。因此gojs内部给内置了名字为TreeExpanderButton的树图折叠展开按钮,在使用的时候只需要根据自己的脑图朝向把图形折叠展开按钮的按钮根据Spot(点布局)给放置到和后代节点解除的位置就可以了。默认可以实现树形结构的折叠展开。

go.Group(组)的内部元素的展开折叠

前文中提到,可以给节点中的属性isGroup设置true。将此节点设置为组的父级显示内容。然后通过其他节点内部的属性group为组的父级节点的key值,来渲染组的上下级关系。代码示例如下

this.myDiagram.groupTemplate  =
$$(go.Group, "Horizontal",
    $$(go.Panel, "Auto",
        $$(go.Shape, "Circle",{width:200,height:200},
            new go.Binding("fill", "color"),
            new go.Binding("figure", "figure"),
        ),
        $$(go.Panel,"Horizontal",
            $$("SubGraphExpanderButton",{ margin: new go.Margin(0, 3, 5, 0)}),
            $$(go.TextBlock,
                new go.Binding("text", "text")),
        ),
    ),
);
this.myDiagram.nodeTemplate  =
$$(go.Node, "Auto",
    $$(go.Shape, "Circle",{width:50,height:50},
        new go.Binding("fill", "color"),
        new go.Binding("figure", "figure"),
    ),
    $$(go.TextBlock,
        new go.Binding("text", "text")),
);

组布局有自己的布局模板为groupTemplate,可以根据组布局模板对组的整体样式进行调整。当然在组内的其他节点仍然可以通过nodeTemplate来设置自己的样式。组的展开折叠的属性是SubGraphExpanderButton,可以把组的展开折叠按钮作为一个普通的绘图节点调整想要现实的额位置,其功能为gojs内置,可以直接使用其功能。

go.Panel(面板)的内部元素的展开折叠

在节点图形的模板配置中,如果我们想调整其他的绘图模板的位置,需要两个绘图模板当成一个整体进行布局展示,例如go.Shape(几何图形)go.TextBlock(文本信息)在节点内相对位置不变的需求下,是不能直接把go.TextBlock(文本信息)放到go.Shape(几何图形)内部的,如果想要两个位置相对绑定,就需要把两个绘图模板放到同一个go.Panel(面板之下)。因此对于面板内的元素也可以实现一个展开折叠。

//data
nodes: [
    {
      key: 1,
      text:"三国",
      list1: ["魏", "蜀", "吴"],
    },
],
//methods
this.myDiagram.nodeTemplate = $$(
go.Node,
"Auto",
$$(go.Shape, "Rectangle", { fill: "#67B73C",width:100,height:100 }),
$$(
  go.Panel,
  "Table",
  { column: 0 },
  $$(go.TextBlock, {
    column: 0,
    margin: new go.Margin(3, 3, 0, 3),
    font: "bold 12pt sans-serif",
  },new go.Binding("text", "text")),
  $$("PanelExpanderButton", "LIST1", { column: 1 }),
  $$(
    go.Panel,
    "Vertical",
    { name: "LIST1", row: 1, column: 0, columnSpan: 2 },
    new go.Binding("itemArray", "list1")
  )
)
);

对于go.Panel(面板)的折叠展开按钮是通过内置的PanelExpanderButton来实现的,其然后其第二个参数为需要折叠的go.Panel的name属性保持一直,则可以实现折叠展开。当然也可以根据自己的需求对其样式进行修改。

总结

在可视化图形中。因为数据量大的时候导致显示节点相互折叠导致不完整,往往会对节点内显示的内容进行隐藏。除了前面文章中提到的toolTip(提示信息)之外,还可以通过本文中的折叠展开按钮对内容进行折叠,以保证浏览的重点内容的完整显示。

以上就是详解GoJs节点的折叠展开实现的详细内容,更多关于GoJs节点折叠展开的资料请关注我们其它相关文章!

(0)

相关推荐

  • GoJs中标题和缩略图使用技巧

    目录 前言 标题的使用 随图形变化的标题 不随图形变化的标题 缩略图的使用 总结 前言 在可视化图形中为了方便区分,需要给图形一个标题.可以在画布外面用html调整位置之后作为图形的标题,当然也可以在画布内部进行一个标题的绘制.在画布上的节点数据量比较大的时候,也需要用到缩略图对图形进行一个缩略显示并且拖动缩略图的框选来重点的画布中的部分数据. 标题的使用 还是以前面的数据为例,在原有数据的基础上给图形增加一个标题代码示例如下 //data nodes: [ { key: "1", c

  • 详解GoJs节点的选中高亮实现示例

    目录 前言 gojs节点选中高亮的使用 只选中节点内部分元素的选中样式 定制的选中样式 节点选中时候增加操作按钮 修改选中节点的内部样式 总结 前言 上文中我们说到了,节点之间的文字描述.在有些时候我们要看两个节点之间的关系,在数据量比较大的时候就需要给两个节点给一个选中的样式.在使用的过程中,gojs默认给了一个节点的选中样式,就是一个蓝色的边框. gojs节点选中高亮的使用 //data myDiagram: null, nodes:[ { key: "1", color: &qu

  • Java构造方法实例详解(动力节点java学院整理)

    构造函数是一种特殊的函数.其主要功能是用来在创建对象时初始化对象, 即为v对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.构造函数与类名相同,可重载多个不同的构造函数.在JAVA语言中,构造函数与C++语言中的构造函数相同,JAVA语言中普遍称之为构造方法. 使用构造器时需要记住: 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个.1个或1个以上的参数 4.构造器没有返回值 5.构造器总是伴随

  • Java递归算法详解(动力节点整理)

    递归算法是一种直接或者间接调用自身函数或者方法的算法.Java递归算法是基于Java语言实现的递归算法.递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解.递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解.    递归算法解决问题的特点: 1)递归就是方法里调用自身.  2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口.  3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低.所以一般不提倡用递归算法设计程序.  4)在递

  • Java类的继承实例详解(动力节点Java学院整理)

    一.你了解类吗? 在Java中,类文件是以.java为后缀的代码文件,在每个类文件中最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在public,则类文件的名称可以为任意的名称(当然以数字开头的名称是不允许的). 在类内部,对于成员变量,如果在定义的时候没有进行显示的赋值初始化,则Java会保证类的每个成员变量都得到恰当的初始化: 1)对于  char.short.byte.int.long.float.double等基本数据类型的

  • Js操作树节点自动折叠展开的几种方法

    1.方法一 复制代码 代码如下: var tree = L5.getCmp('edocOutfileRelationTree'); //增加选择树,节点自动折叠 tree.on("click", function(node,e){ node.getUI().toggleCheck(true); }); tree.root.expand(); 2.方法二 复制代码 代码如下: var tree = L5.getCmp('orgstrutree'); //增加选择树,节点自动折叠 tree

  • Java 垃圾回收机制详解(动力节点Java学院整理)

    1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃.当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用.事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片.由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,

  • JS实现的简单折叠展开动画效果示例

    本文实例讲述了JS实现的简单折叠展开动画效果.分享给大家供大家参考,具体如下: <!DOCTYPE = html> <html> <head> <title>www.jb51.net JS折叠展开动画</title> <style> body{ margin: 0px; padding: 0px; } .red{ background-color:red; width:200px; height:200px; position:rel

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

    目录 前言 Group的使用 Group的属性 handlesDragDropForMembers.isSubGraphExpanded属性 isSubGraphExpanded属性 ungroupable.wasSubGraphExpanded属性 结语 前言 在可视化图形中,很多的节点和连线都有某一个特征或者属于某些分类,为了在使用可视化图形的时候更加直观的看出相同类型节点的集合,我们就会用到分组的绘图模板. Group的使用 //data nodes: [ { key: "1",

  • react echarts tree树图搜索展开功能示例详解

    目录 前言 最终效果 版本信息 核心功能: 关键思路: 附上代码 数据data.js 功能: TreeUtils 总结: 前言 umi+antd-admin 框架中使用类组件+antd结合echarts完成树图数据展示和搜索展开功能 最终效果 版本信息 "antd": "3.24.2", "umi": "^2.7.7", "echarts": "^4.4.0", "echart

  • Bootstrap 折叠(Collapse)插件用法实例详解

    Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷.下面通过本文给大家介绍Bootstrap 折叠(Collapse)插件用法实例,一起看看吧! 折叠(Collapse)插件可以很容易地让页面区域折叠起来.无论您用它来创建折叠导航还是内容面板,它都允许很多内容选项. 如果您想要单独引用该插件的功能,那么您需要引用 collapse.js.同时,也需要在您的 Bootst

  • vue列表单项展开收缩功能之this.$refs的详解

    展开效果–看红框区域 收缩效果–看红框区域 接下来看代码逻辑 ###template部分:已去除与本文不相关的功能代码 <li class="main-video"v-for="(item, index) of courseSubList" :key="item.id"> <div class="audio-name"> <div class="img-l"> <s

随机推荐