GoJs中使用HTML方法示例

目录
  • 前言
  • 使用html的方式
    • 提示信息的html交互
    • 右键菜单的html交互
    • 文本编辑的html交互
  • 总结

前言

gojs中因为有自己的绘图模板和一些语法限制,实际上都是在canvas标签的特性上进行的封装。但是有些时候其拓展就不能满足需求的时候,可以对其和html结构进行一些交互,达到自己显示上的特殊需求的展示。

使用html的方式

本文将从提示信息、右键菜单、和文本编辑三个方面来体现gojshtml之间的交互。而对于html的使用交互过程中,最主要考虑到的就是html信息何时展示,何时隐藏.展示的时候展示到什么位置。而触发的这个在gojs中是HTMLInfoshowhide属性。给showhide绑定对应的回调函数。

提示信息的html交互

在前面的文章中提到过提示信息的展示(toolTip),并且讲到了toolTip内部的不同绘图模板的的自定义类型。但是很多时候还是无法满足一些特殊的展示的样式,因此可以使用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",
{
    toolTip: myToolTip
},
$$(
  go.Shape,
  "Circle",
  { width: 30, height: 30, name: "ICON" },
  // new go.AnimationTrigger('stroke'),
  new go.Binding("fill", "color"),
  new go.Binding("figure", "figure")
),
$$(go.TextBlock, new go.Binding("text", "text"))
);
showToolTip(obj, diagram) {
    let toolTipDIV = document.getElementById('toolTipDIV');
    let pt = diagram.lastInput.viewPoint;
    toolTipDIV.style.left = (pt.x + 10) + "px";
    toolTipDIV.style.top = (pt.y + 10) + "px";
    document.getElementById('toolTipParagraph').textContent = "此节点的key为" + obj.data.key;
    toolTipDIV.style.display = "block";
},
hideToolTip(diagram) {
    let toolTipDIV = document.getElementById('toolTipDIV');
    toolTipDIV.style.display = "none";
}

show的回调函数showToolTip的两个参数,第一个是obj,通过obj.data可以获取到对应鼠标移入的节点数据。第二个参数为diagram,前面的文章中我们提到过,可以通过diagram.lastInput.viewPoint获取到鼠标触发该回调函数时候的位置对象数据,其内部为x,y属性。然后给该位置一个偏移量显示提示信息,就可以保证在鼠标的旁边展示。

右键菜单的html交互

右键菜单和html的交互和提示信息的相似,都是通过绑定方法来控制位置的显示和隐藏。因此我们把contextMenu也配置成myToolTip。示例如下

{
    toolTip: myToolTip,
    contextMenu:myToolTip
}

由上图可以看出在鼠标移出或者右键点击都可以触发提示信息,但是不同的是提示信息有默认显示的时间,并且会自动消失。但是右键点击的时候因为没有触发hideToolTip回调函数,因此不会自动消失,需要点击画布才能把提示消息显示消失。

文本编辑的html交互

文本编辑的交互和提示信息略有不同。因为是文本编辑,所以必须是输入框类型的,但是还可以选select选择器进行有选项的编辑。下面以select为例,可以选择所有节点的text信息。其示例代码如下

let customEditor = new go.HTMLInfo();
let customSelectBox = document.createElement("select");
customEditor.show = function(textBlock, diagram, tool) {
if (!(textBlock instanceof go.TextBlock)) return;
customSelectBox.innerHTML = "";
let list = ['三国','魏','蜀','吴'];
for (let i = 0; i < list.length; i++) {
    let op = document.createElement("option");
    op.text = list[i];
    op.value = list[i];
    customSelectBox.add(op, null);
}
customSelectBox.value = textBlock.text;
customSelectBox.addEventListener("keydown", function(e) {
    var keynum = e.which;
    if (keynum == 13) {
    tool.acceptText(go.TextEditingTool.Enter);
    return;
    } else if (keynum == 9) {
    tool.acceptText(go.TextEditingTool.Tab);
    e.preventDefault();
    return false;
    } else if (keynum === 27) {
    tool.doCancel();
    if (tool.diagram) tool.diagram.focus();
    }
}, false);
let loc = textBlock.getDocumentPoint(go.Spot.TopLeft);
let pos = _this.myDiagram.transformDocToView(loc);
customSelectBox.style.left = pos.x + "px";
customSelectBox.style.top  = pos.y+ 30 + "px";
customSelectBox.style.position = 'absolute';
customSelectBox.style.zIndex = 100;
_this.myDiagram.div.appendChild(customSelectBox);
}
customEditor.hide = function(diagram, tool) {
    diagram.div.removeChild(customSelectBox);
}
customEditor.valueFunction = function() { return customSelectBox.value; }
this.myDiagram.toolManager.textEditingTool.defaultTextEditor = customEditor;

文本编辑的交互首先需要对new go.HTMLInfo()进行一个实例化,和上面一样也是通过show方法和hide方法进行一个显示隐藏的操作。然后通过go.Spot.TopLeft获取点击文本的左上角的位置。然后给创建的select定位一个相对的位置。然后通过new go.HTMLInfo()valueFunction方法把select选中的option的值赋给编辑的文本TextBlock。从而实现一个文本编辑选择的过程。

总结

在很多时候。有canvas拓展封装的gojs无法满足提示信息的样式或者用html实现起来更加简单,可以用gojshtml的交互来实现,gojs是通过JavaScript来控制html元素的显示隐藏和显示的位置。

以上就是GoJs中使用HTML方法示例的详细内容,更多关于GoJs使用HTML的资料请关注我们其它相关文章!

(0)

相关推荐

  • 一文详解GoJs中go.Panel的itemArray属性

    目录 前言 itemArray属性的使用 只包含一种绘图模板的渲染列表 包含不同的绘图模板的渲染列表 内部多个绘图模板的不同列的行循环 总结 前言 上一篇文章中,为了演示go.panel内部元素的折叠展开,也是为了举例子比较简单.使用了一个go.Panel的属性itemArray,本文将详细的介绍一下itemArray属性. itemArray属性的使用 只包含一种绘图模板的渲染列表 //data nodes: [ { key: 1, text:"三国", list1: ["

  • GoJs连线绘图模板Link使用示例详解

    目录 前言 go.link的简单使用 go.Link的属性配置 routing属性 curve属性 corner.toEndSegmentLength.fromEndSegmentLength.fromShortLength.toShortLength属性 selectable.fromSpot.toSpot属性 总结 前言 可视化图形中除了携带很多信息的节点(node)之外,还需要知道他们之间的关系,而链接他们之间的连线在gojs中是使用go.link进行绘制.在渲染的时候我们根据数据的fro

  • GoJs中导出图片或者SVG实现示例详解

    目录 前言 导出图片和SVG的使用 导出图片的使用方法 导出SVG的使用方法 总结 前言 在可视化图形的分析中,对基础图形进行增删改之后.除了保存修改之后的可视化数据之外.还需要保存为图片或者svg进行分享. 导出图片和SVG的使用 导出图片和导出SVG相似,只是调用的生成方法不同.而生成图片有两种方法分别为makeImage和makeImageData.而生成SVG只有makeSvg方法.其准备工作沿用之前的数据.添加生成image和svg的按钮. //html <button @click=

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

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

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

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

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

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

  • GoJs连线上的信息展示使用详解

    目录 前言 连线上的信息怎么使用 连线上的文字信息的默认显示 对连线显示的信息增加其他绘图模板 修改文字和连线方向平行 两个节点之间有多个关系 总结 前言 在可视化图像中.节点是信息写的单元,而连线就是这些这些信息单元的联系.在有些情况下,不止需要知道两个节点之间有关系并且还需要知道两个节点之间的关系进行一个描述.这个时候就需要在连线上展示一些信息. 连线上的信息怎么使用 连线上的文字信息的默认显示 在之前的go.Link一文中提到过,是通过linkTemplate连线进行配置.下面对连线上的配

  • vue不通过路由直接获取url中参数的方法示例

    前言 众所周知vue中使用路由的方式设置url参数,但是这种方式必须要在路径中附带参数,而且这个参数是需要在vue的路由中提前设置好的. 相对来说,在某些情况下直接在url后面拼接?mid=100的方式传递参数更灵活,你不需要设置路由,只需要在url后拼接参数即可,但是这种方式就需要通过javascript获取并提取url中的参数,通过传统的方式直接在页面中获取是行不通的了,因为vue中是无法通过location.search()来获取url问号之后的内容的. 当然,这个问题也有解决方法,就是把

  • PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例

    本文实例讲述了PHP模板引擎Smarty之配置文件在模板变量中的使用方法.分享给大家供大家参考,具体如下: 配置文件在模板中的作用是:给前端设计页面定义变量,主要控制的是模板的外观,与 PHP 程序无关. 使用步骤: 1.使用 $tpl->configs_dir="目录"  //指定配置文件存放的目录: 2.在模板中要使用 <{configs_load file="配置文件"}> 加载f配置文件,如果有区域的话,可以使用 section="

  • Python中list初始化方法示例

    本文实例讲述了Python中list初始化方法.分享给大家供大家参考,具体如下: 1.基本方法. lst = [1, 2, 3, 4, 5] 2.初始化连续数字. >>> lst = [n for n in range(5, 10)] >>> print(lst) [5, 6, 7, 8, 9] 3.初始化n个相同值.(两种方式) >>> lst = ['x' for n in range(5)] >>> print(lst) ['x

  • C#接口在派生类和外部类中的调用方法示例

    本文实例讲述了C#接口在派生类和外部类中的调用方法.分享给大家供大家参考,具体如下: C#的接口通过interface关键字进行创建,在接口中可以包含属性,方法等成员变量.接口的派生类可以对接口中的方法进行实现.一个类可以继承多个接口对这些接口中的方法进行实现,一个接口也可以派生多个类接口中的方法可以由这些类中的一个或多个进行实现.在接口的派生类中可以直接调用接口中的方法. 在派生类中调用举例: //接口 public interface IPersonalService { //接口中的方法

  • thinkPHP控制器变量在模板中的显示方法示例

    本文实例讲述了thinkPHP控制器变量在模板中的显示方法.分享给大家供大家参考,具体如下: 控制器中变量 public function register() { $type = I("param.type");//1.学生注册 2.教师注册 3.其他注册 $this -> assign("type", $type); //q全部部门 $depart1 = M("Depart") -> where("status=1 an

  • jQuery访问json文件中数据的方法示例

    本文实例讲述了jQuery访问json文件中数据的方法.分享给大家供大家参考,具体如下: 有时候我们可能需要用到json文件存储数据,然后通过前台语言直接进行访问. 首先是json文件: { "管道": [ { "ElementId": "标识号", "GISID": "GISID", "Label": "编号", "StartNodeID":&q

  • Java通过正则表达式获取字符串中数字的方法示例

    前言 本文通过一个小范例来学习java中通过正则表达式如何获得一个字符串中的数字,下面话不多说,来看看详细的介绍吧. 示例代码如下: import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { public static void main(String[] args) { String strInput = "3a7s10@5d2a6s17s56;33"; String reg

  • Python 3.x读写csv文件中数字的方法示例

    前言 本文主要给大家介绍了关于Python3.x读写csv文件中数字的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 读写csv文件 读文件时先产生str的列表,把最后的换行符删掉:然后一个个str转换成int ## 读写csv文件 csv_file = 'datas.csv' csv = open(csv_file,'w') for i in range(1,20): csv.write(str(i) + ',') if i % 10 == 0: csv.write

  • 用juery的ajax方法调用aspx.cs页面中的webmethod方法示例

    首先在 aspx.cs文件里建一个公开的静态方法,然后加上WebMethod属性. 如: [WebMethod] public static string GetUserName() { //...... } 如果要在这个方法里操作session,那还得将WebMethod的EnableSession 属性设为true .即: [WebMethod(EnableSession = true)]//或[WebMethod(true)] public static string GetUserNam

  • Yii 2.0在Grid中格式化时间方法示例

    本文主要给大家介绍了关于Yii 2.0在Grid中格式化时间的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 直接上代码 <?= GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', 'username', 'email:email', 'created_at:date', // 这两个需要显示为 2016

随机推荐