今天开始我们就从最基础解析如何构建 html5 canvas 拓扑图应用,ht 内部封装了一个拓扑图形组件 ht.graph.graphview(以下简称 graphview)是 ht 框架中 2d 功能最丰富的组件,其相关类库都在 ht.graph 包下。graphview 具有基本图形的呈现和编辑功能,拓扑节点连线及自动布局功能,电力和电信等行业预定义对象,具有动画渲染等特效,因此其应用面很广泛,可作为监控领域的绘图工具和人机界面,可作为一般性的图形化编辑工具,可扩展成工作流和组织图等企业应用。简单说来就是:拓扑图是泛化的说法,电信网管的网络拓扑图、电力的电网拓扑图、工业控制的监控图、工作流程图、思维脑图等等,简单说就是节点连线构成的这些都是这里指的拓扑图。
用 ht 开发一个网络拓扑图是非常容易的一件事,只需要短短几行代码就能完成一个简单的服务器与客户端的拓扑图:
这个例子非常基础,几乎完成了服务器与客户端在拓扑上的所有功能。话不多说,猜猜看这个例子包括 html 标签的所有部分总共花了多少行代码?减去空行也就 50 行,我还做了很多样式部分的设计,毕竟给大家看的例子不能太丑嘛~
大家可以在 自行下载代码,注意因为有 json 文件,会存在图片跨域问题,需要用 firefox 或者本地服务器跑起来。
我们在最开始就说明一下,ht 是基于 html5 标准的企业应用图形界面一站式解决方案, 其包含通用组件、拓扑组件和 3d 渲染引擎等丰富的图形界面开发类库,用户只需要引入 ht.js 即可,而且跟别的任何东西完全不冲突,因为 ht 只是声明了一个全局变量 ht,仅此而已。
接下来解析代码部分,首先,搭建拓扑图场景:
dm = new ht.datamodel();//数据容器gv = new ht.graph.graphview(dm);//拓扑组件 参数为dm 绑定的数据模型gv.addtodom();//将拓扑图添加进body体中
ht 的所有组件的根部都是一个 div,通过 getview() 方法获取,我们在 addtodom 方法中就用到了这个方法:
addtodom = function(){ var lf = this, view = lf.ge保护环境tview(), //获取组件底层 div style = view.style; document.body.appendchild(view);//将底层 div 添加进 body 体中 style.left = '0';//ht 一般将组件都设置为 absolute 的绝对定位 style.right = '0'; style.top = '0'; style.bottom = '0'; window.addeventlistener('resize', function () { lf.iv(); }, fal); //事件监听窗口大小变化,iv 为延时刷新组件 }
然后向拓扑场景中添加“服务器”以及“客户端”节点:
var rver = new ht.node();rver.tname('rver');//设置节点名称,显示在节点下方rver.timage('rverimage');//设置节点图片rver.tsize(20, 60);//设置节点大小dm.add(rver);//将节点添加进数据容器dm中rver.tposition(100, 100);//设置节点坐标(x, y)var group = new ht.group();//组,组中可以有多个节点group.timage('groupimage');//设置图片dm.add(group);var client = new ht.node();//这个节点是添加进组中的client.tname('client');client.timage('clientimage');dm.add(client);group.addchild(client);//组添加孩子group.texpanded(true);//设置组为展开模式client.tposition(200, 100);//设置节点位置 如果组中只有一个节点,那么这个节点的位置可以为组的位置
服务端与客户端的连线?2 行代码搞定!其实 ht 中添加节点的方法非常简单,一般就 2 行代码能结束:先声明实例变量,然后将这个实例变量添加进数据容器中。
var edge = new ht.edge(rver, client);dm.add(edge);
我们很好奇虚线是怎么做出来的?虚线的形成是搭建在连线之上的,步骤有 3 个:
引入 ht-dashflow.js 文件 ;将连线的样式属性 edge.dash.flow 设置为 true;在场景组件中打开虚线流动的开关,这里就是 gv.enabledashflow(true);是不是非常简单!接下来我们看看怎么设置:
edge.s({//节点设置样式属性 'edge.dash': true,//显示虚线 'edge.dash.flow': true,//开启虚线流动 'edge.dash.color': 'yello外国诗人w',//虚线颜色 'edge.dash.pattern': [8, 8],//虚线样式 'label': 'flow',//节点注释 'label.background': 'pink',//节点注释背景颜色 });
这样所有的显示部分就介绍完毕啦~等等,好像还少点什么?对了,我忘了介绍 ht 中的 ht.group 类了,顾名思义,就是“组”的意思,组中可以包含很多节点,双击可显示或隐藏组内的所有节点,上面代码有写到,但是我还做了一点小动作,就是组右上角的显示部分,其实就是一个标注,用来提示说明的:
group.s({ 'group.background': 'rgba(255, 255, 0, 0.1)',//设置组的背景颜色 'note': "double click me!",//标注 显示的内容 '中秋节故事儿童简单的故事note.position': 1疫情生活3,//标注位置 'note.offt.y': 10,//标注位置y轴偏移});
我们可以通过 note.position 来改变标注的位置(具体位置信息请参考ht for web 位置手册 ),也可以使用 note.offt.x 和 note.offt.y 来改变标注的位置。
全部代码解析完毕!我会尽快更新,如果大家觉得进度慢的话,可以自己去我们官网( ht for web )上学习,希望大家能有更多的收获,学习是自己的事情,快动手实践将这片文章的内容变成你自己的知识吧!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.88阿甘佐回忆录7551.com。
本文发布于:2023-04-06 11:07:51,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/b35480f805faaa7c96685b8a0762c456.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:详解快速开发基于 HTML5 网络拓扑图应用.doc
本文 PDF 下载地址:详解快速开发基于 HTML5 网络拓扑图应用.pdf
留言与评论(共有 0 条评论) |