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

目录
  • 前言
  • 标题的使用
    • 随图形变化的标题
    • 不随图形变化的标题
  • 缩略图的使用
  • 总结

前言

在可视化图形中为了方便区分,需要给图形一个标题。可以在画布外面用html调整位置之后作为图形的标题,当然也可以在画布内部进行一个标题的绘制。在画布上的节点数据量比较大的时候,也需要用到缩略图对图形进行一个缩略显示并且拖动缩略图的框选来重点的画布中的部分数据。

标题的使用

还是以前面的数据为例,在原有数据的基础上给图形增加一个标题代码示例如下

//data
nodes: [
    { key: "1", color: "#99FFFF", text: "三国", figure: "Rectangle" },
    { key: "1-1", color: "#FF0000", text: "魏", figure: "Circle" },
    { key: "1-2", color: "#FFFF66", text: "蜀", figure: "Circle" },
    { key: "1-3", color: "#0000FF", text: "吴", figure: "Circle" },
  ],
  links: [
    {
      from: "1",
      to: "1-1",
    },
    {
      from: "1",
      to: "1-2",
    },
    {
      from: "1",
      to: "1-3",
    },
  ],
  //methods
  this.myDiagram.nodeTemplate = $$(
    go.Node,
    "Vertical",
    $$(
      go.Shape,
      "Circle",
      { width: 30, height: 30, name: "ICON" },
      new go.Binding("fill", "color"),
      new go.Binding("figure", "figure")
    ),
    $$(go.TextBlock,new go.Binding("text", "text"))
  );

随图形变化的标题

增加一个随图形变化的标题,可以通过location给标题一个厨师的定位

this.myDiagram.add(
    $$(go.Part, { location: new go.Point(0, -80) },
    $$(go.TextBlock, "三国争霸", { font: "bold 24pt sans-serif", stroke: "#67B73C" }))
);

由上面图形可以看出,在图像的滚动以及整体的放大缩小的过程中。图形的标题都会随着图形的本身进行同样的放大和缩小。相当于把标题当做了一个游离的文本节点。当然你也可以设置go.Part的属性selectable:false。这样你在拖动标题的时候,整个图形都会随着拖动。因此标题无法单独移动,删除。

不随图形变化的标题

实现不随图形变化的标题,最简单的方法是用修改html的样式和位置来实现图形的标题。此处我们要说到的是通过gojs来实现一个不随图形变化的标题。

this.myDiagram.add(
    $$(
      go.Part,
      { _viewPosition: new go.Point(900, 120), layerName: "Grid" },
      $$(go.TextBlock, "三国争霸", {
        font: "bold 24pt sans-serif",
        stroke: "green",
      })
    )
);
this.myDiagram.addDiagramListener("ViewportBoundsChanged", function (e) {
    e.diagram.commit(function (obj) {
      obj.parts.each(function (part) {
        if (part._viewPosition) {
          part.position = obj.transformViewToDoc(part._viewPosition);
          part.scale = 1 / obj.scale;
        }
      });
    });
});

由上面图形可以看出,在图像滚动和放大缩小的过程中。图形的标题位置和大小都不会发生改变。这样就可以始终在一个位置进行显示。其位置的展示类似于css的绝对定位。但是在图形滑动和放大缩小的过程中,可以看到标题虽然位置和大小没有发生变化。但是好像在过程中会发生闪烁。这是因为画布的底层为H5新增标签canvas,在canvas中是通过获取2d渲染上下文。在中间的内部元素发生变化的时候,不是部分元素的替换。其内部元素变化的过程是每次都会把画布中的所有元素擦掉,重绘。一直循环这个过程来实现画布中显示元素的变化。

缩略图的使用

在画布中的节点数量比较多的时候,我们又想着重的观看到某些重点的内容显示。这个时候我们就会对画布的整体进行放大,这样我们的可视区域就只能显示部分的画布内容。如果我们需要从左上角的可视图形展示切换到右下角的可视图形展示的过程中,如果用鼠标点击画布逐步拖动非常慢,效率很低。这个时候就需要使用到缩略图,在缩略图内部展示选择框就是我们可视区域的图形。我们可以拖动框选的矩形就可以看到画布的人和位置了。非常的方便。缩略图的使用方法如下

//html
<div id="myOverviewDiv"></div>
//methods
let myOverview =
    $$(go.Overview, "myOverviewDiv",
    { observed: this.myDiagram }
)

缩略图是使用go.Overview来实现的,因为其继承go.Diagram。所以使用方法基本一致。都是需要一个div容器进行初始化,然后其observed属性为图形的实例,在本例中是this.myDiagram

总结

在一个画布中,标题和缩略图的使用非常的普遍。一个能表述中可视化图形的功能。另外一个则是方便我们重点观察画布的某些元素。增加对可视化图形信息提取的效率。

以上就是GoJs中标题和缩略图使用技巧的详细内容,更多关于GoJs标题缩略图的资料请关注我们其它相关文章!

(0)

相关推荐

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

    目录 前言 节点折叠展开的不同情况 树形布局特有的属性后代节点的折叠展开 go.Group(组)的内部元素的展开折叠 go.Panel(面板)的内部元素的展开折叠 总结 前言 前面的文章中提到了提示信息(toolTip)在节点信息内容过多的时候,需要节点信息的内容进行隐藏,在鼠标移入的时候进行未显示信息的提示框形式的选中,本文讲从另外的角度处理在画布上的可视化图形的内容过多的时候的处理情况,一种是把节点的内部的折叠和展开,另外一种就是对部分节点进行折叠和展开. 节点折叠展开的不同情况 对于节点的

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

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

  • 微信分享的标题、缩略图、连接及描述设置方法

    微信分享的标题.缩略图.连接及描述该如何设置,使用微信分享过程中会遇到这个情况,无解的朋友可以看看下面的代码 <script> var imgUrl = 'http://topic.xcar.com.cn/201403/ad_q3/pic/banner.jpg'; var lineLink = 'http://topic.xcar.com.cn/201403/ad_q3/index.php'; var descContent = "http://topic.xcar.com.cn/2

  • vue中element-ui表格缩略图悬浮放大功能的实例代码

    element-ui界面非常简洁和美观,提供的组件可以满足绝大多数的应用场景,当表格中显示了图片的缩略图时,想要鼠标浮动在缩略图上时放大图片的效果,该如何实现呢?element-ui虽然没有直接提供图片悬浮放大的组件,但是可以使用Popover弹出框组件,一样实现效果,如下: 具体的代码(此处只是图片单元格的代码,其它代码省略): <el-table-column prop="picture" header-align="center" align="

  • 在DB2中提高INSERT性能的技巧(1)

    正在看的db2教程是:在DB2中提高INSERT性能的技巧(1). INSERT 处理过程概述 首先让我们快速地看看插入一行时的处理步骤.这些步骤中的每一步都有优化的潜力,对此我们在后面会一一讨论. 在客户机准备 语句.对于动态 SQL,在语句执行前就要做这一步,此处的性能是很重要的:对于静态 SQL,这一步的性能实际上关系不大,因为语句的准备是事先完成的. 在客户机,将要插入的行的各个 列值组装起来,发送到 DB2 服务器. DB2 服务器确定将这一行插入到哪一页中. DB2 在 用于该页的缓

  • Oracle数据库中SQL语句的优化技巧

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.

  • Android中ListView Item布局优化技巧

    本文实例讲述了Android中ListView Item布局优化技巧.分享给大家供大家参考,具体如下: 之前一直都不知道ListView有多种布局的优化方法,只能通过隐藏来实现,自己也知道效率肯定是很低的,但是也不知道有什么方法,这些天又查了一些资料,然后知道 其实google早就帮我们想好了优化方案了. 假设你的ListView Item有三种布局样式的可能:就比如很简单的显示一行字,要靠左,居中,靠右. 这时我们就可以在BaseAdapter里面重写两个方法: private static

  • Python中字符串的常见操作技巧总结

    本文实例总结了Python中字符串的常见操作技巧.分享给大家供大家参考,具体如下: 反转一个字符串 >>> S = 'abcdefghijklmnop' >>> S[::-1] 'ponmlkjihgfedcba' 这种用法叫做three-limit slices 除此之外,还可以使用slice对象,例如 >>> 'spam'[slice(None, None, -1)] >>> unicode码与字符(single-characte

  • SQLite在C#中的安装与操作技巧

    SQLite 介绍 SQLite,是一款轻型的数据库,用于本地的数据储存. 先说说优点,它占用资源非常的低,在嵌入式设备中需要几百K的内存就够了:作为轻量级数据库,他的处理速度也足够快:支持的的容量级别为T级:独立: 没有额外依赖:开源:支持多种语言: 我的用途 在项目开发中,需要做一次数据数据同步.因为数据库实时数据的同步,需要记录更新时间,系统日志等等数据:当然,你也可以选择写ini和xml等等配置文件来解决,但是都如数据库可读性高不是. 安装 1. 引用 .NET 驱动 http://sy

  • Python 中 list 的各项操作技巧

    最近在学习 python 语言.大致学习了 python 的基础语法.觉得 python 在数据处理中的地位和它的 list 操作密不可分. 特学习了相关的基础操作并在这里做下笔记. ''' Python --version Python 2.7.11 Quote : https://docs.python.org/2/tutorial/datastructures.html#more-on-lists Add by camel97 2017-04 ''' list.append(x) #在列表

  • C#中WinForm程序退出方法技巧总结

    本文实例总结了C#中WinForm程序退出方法技巧.分享给大家供大家参考.具体分析如下: 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0); 等他们各自的方法不一样,下面我们就来详细介绍一下. 1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退

  • Python中最大最小赋值小技巧(分享)

    码代码时,有时候需要根据比较大小分别赋值: import random seq = [random.randint(0, 1000) for _ in range(100)] #方法1: xmax, xmin = max(seq), min(seq) #方法2: xmax, *_, xmin = sorted(seq) 从上面这个来看,看不出来方法2的优势来,不过我们常用的是比较两个数的大小,并选取: dx, dy = random.sample(seq, 2) #方法1: dx, dy = m

随机推荐