`
xiaozhonghua
  • 浏览: 254131 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HTML5环形树拓扑图

 
阅读更多

前阵子,项目中碰到这样一个显示难题:一组树形的网络设备,要在拓扑图上同时显示出树形从属关系,以及动态存在于任意两个设备之间的业务关系。也就是说,拓扑图上要同时显示两组数据:一套是树形的从属关系,一套是随机在节点之间产生的某种业务关系。当然要求是用连线显示,而且形状要清晰、不要混乱。

 

这是一个难题。一个树形结构并不难显示,也可以很方便的布局。例如,设置一下节点、连线样式,并设置数据到twaver的databox中,通过layout()函数即可得到下面的图:

 

twaver.Styles.setStyle('label.position','right.right');
twaver.Styles.setStyle('label.font','10px arial');
twaver.Styles.setStyle('link.from.xoffset',4);
twaver.Styles.setStyle('link.to.xoffset',-4);
twaver.Styles.setStyle('link.width',2);
twaver.Styles.setStyle('link.color','#CCCCCC');
twaver.Styles.setStyle('select.style','none');

 



 非常清晰可人。不过如果再加上随机的两点之间的连线,就很乱了,而且也无法很好的布局。

 

继续想想办法。当层级关系很深之后,这种平铺的tree会延展的很宽,左右滚来滚去很不方便。如果能把树环形排列起来,就不怕层级太多,如下图:

var root=new twaver.Node();
root.setLocation(x,y);
root.setClient('level',0);
root.setSize(50,50);
root.setImage('circle');
root.setName(name);
root.setClient('group', groupID);
root.setClient('root', root);
root.setStyle('label.position','center');
root.setStyle('label.color','white');
root.setStyle('label.font','12px "Microsoft Yahei"');
box.add(root);

 

 



 这样排列的好处是,当层级很多,整个树也会尽量盘踞蜷缩在一起,不至于太宽或太高。而且层次也非常清晰。

 

如果加上动态业务连接关系呢?例如这些点表示计算机,连线表示他们之间的socket连接。随机生成一些连线,颜色用红色区分,则大概如下:

 

var connection=new twaver.Link(node, target);
connection.setStyle('link.width',0.2);
connection.setStyle('link.color', 'red');//#aaaaaa');
connection.setClient('connection',true);
connection.setClient('angle', (target.getClient('angle')+node.getClient('angle'))/2);
box.add(connection);

 



 瞬间就凌乱了,有木有。这样肯定不行,用户眼都花了。而且两组线交织在一起,哪个都看不清。

 

于是进一步考虑视觉优化。由于业务连线是动态的、根据设备来查看的,所以不需要一下子显示清楚所有的业务连线。所以可以考虑用淡淡的颜色来弱化业务线的存在。还好html5的canvas允许我们使用小数的线宽和带透明度的颜色。这里就用0.2的线宽和#aaaaaa的淡灰色来设置业务线试试,效果如下:

 

link.setStyle('link.width',0.2);
link.setStyle('link.color', '#aaaaaa');

 



 这样效果好了很多。主要是淡淡的灰色线条不影响全图的主结构关系,用户依旧可以一眼看清全图结构。不过业务连接线的存在感并不太强,需要加强一下。继续改进:鼠标划过一个节点,让它关联的连线都通过换颜色高亮起来,看效果如何:

 

if(link.getClient('connection')){
	if(link.getFromNode()==element || link.getToNode()==element){
		link.setStyle('link.color', 'red');
		link.setStyle('link.width', 1);
		link.getFromNode().setClient('rover', true);
		link.getToNode().setClient('rover', true);
		link.getFromNode().setClient('alpha', 1);
		link.getToNode().setClient('alpha', 1);
	}else{
		link.setStyle('link.width',0.2);
		link.setStyle('link.color', '#aaaaaa');
	}
}				

 

 



 这样就清晰多了。当层级再多,也不会显得混乱。

 



 如果进一步控制环形的布局角度和方向,还可以做出更多有意思的形状:

 



 
 

 

 



看,谁说拓扑图一定要死板呢?两套连线也可以非常清晰的显示和同时存在。对代码感兴趣的同学可以留言探讨,谢谢!

  • 大小: 81.1 KB
  • 大小: 67.7 KB
  • 大小: 146.9 KB
  • 大小: 116.4 KB
  • 大小: 183.1 KB
  • 大小: 198.8 KB
  • 大小: 254.7 KB
  • 大小: 98.3 KB
  • 大小: 342.2 KB
  • 大小: 152.8 KB
  • 大小: 451.8 KB
分享到:
评论
3 楼 shuishan_sun 2017-01-22  
你好,现在正在学习twaver,对您这个例子很感兴趣,请问能把原发发我一份研究一下么?
shuishan_sun@sina.com
2 楼 007007jing 2015-09-23  
做的很炫。最近正好在做人际关系拓扑图,大神方便的时候给发份代码  007007jing@163.com 谢谢
1 楼 out_lier 2015-09-21  
楼主这个很清晰明了啊,是使用什么工具做的,我现在有个类似的需求,通过这种方式做出来应该会比较惊艳。

相关推荐

    Gojs设备拓扑图Demo实例(设备,端口均可点击)

    4. **布局算法**:GoJS内置了多种布局算法,如树形布局、环形布局、网格布局等,可以帮助自动调整节点的位置,使得拓扑图更加整洁美观。在这个实例中,可能使用了适合设备和端口关系的特定布局。 5. **动画效果**:...

    网页模板——jQuery实现人事物关系拓扑图代码.zip

    5. **第三方插件或库**:虽然jQuery自身并不直接提供绘制拓扑图的功能,但通常会与其他图形库(如D3.js、JointJS或GoJS)结合使用。这些库专门处理图形渲染和布局算法,而jQuery则处理用户交互和数据处理。 6. **...

    拓扑管理资料

    常见的网络拓扑类型包括总线型、环形、星形、网状和树形等。了解不同拓扑类型有助于设计高效、可靠和可扩展的网络架构。 2. **系统拓扑**:在服务器集群或分布式系统中,系统拓扑描述了各个节点如何协同工作。这...

    d3.js 树形结构

    **d3.js 树形结构**是数据可视化领域中一种常用的数据展示方式,它通过图形化的方式呈现层次化的数据,通常用于展现组织架构、文件系统或者网络拓扑等具有层级关系的信息。d3.js,全称Data-Driven Documents,是由...

    电子招生网站设计 网络课程设计

    2. 选择适合的网站类型(例如静态或动态)和拓扑结构(例如星型、环形或树形)。 3. 硬件选型包括服务器、物理设备、交换机和路由器,考虑性能、稳定性和成本等因素。 4. 子网划分和IP地址分配需遵循IP规划原则,...

    ht-for-web

    在页面布局方面,ht-for-web 提供了多种布局算法,如网格布局、树形布局、环形布局等,可以根据需要灵活调整。这使得开发者在构建复杂页面时,能够轻松地组织和管理各个组件的位置和大小,提高用户体验。此外,框架...

    go.js无水印版+去水印方法

    Go.js 是一个强大的JavaScript库,专门用于创建交互式的图表和图形,特别是在网络应用中构建复杂的拓扑图和流程图。这个资源提供的是无水印版本的Go.js,以及去除Go.js水印的具体方法,这对于那些希望在自己的项目中...

    d3面包圈例子

    此外,由于提到了“拓扑结构的层级关系”,这可能意味着这个例子还使用了D3的树布局或力导向布局来展示层次结构。D3的`d3.tree()`或`d3.cluster()`函数可以生成节点和边的布局,然后通过`d3.hierarchy()`处理数据...

    互联网基础复习大纲.pdf

    * 按拓扑:星形网、树形网、环形网、总线网 * 按覆盖范围:局域网、城域网、广域网 三、Internet 的结构 * 五个接入级:网络接入点NAP、多个公司经营的国家主干网、地区ISP、本地ISP、校园网、企业或家庭PC机上网...

    2021-2022计算机二级等级考试试题及答案No.472.docx

    19. 网络拓扑结构:常见的网络拓扑结构有星形、环形、总线型,分支(或树形)也是常见的拓扑结构形式之一。 20. Internet与Intranet的区别:Internet是全球范围的公共互联网,而Intranet是企业内部的私有网络,它们...

    2021-2022计算机二级等级考试试题及答案No.19151.docx

    8. **结构化分析工具**:结构化分析的工具通常包括数据流图(DFD)、数据字典(DD)和判定树,PAD图是结构化程序设计的图形表示,不是结构化分析的工具。 9. **SQL插入语句**:在SQL中,`INSERT INTO`语句用于向表...

    实用网络技术基础和网页的相关讲解

    此外,网络的拓扑结构,如星形、总线、环形、树形、网状和混合拓扑,也是理解网络架构的关键。 接着,第二部分探讨“网络操作技术”,以Windows网络操作系统为例。这部分涵盖了Windows网络的基本概念、功能,如文件...

    2021-2022计算机二级等级考试试题及答案No.5413.docx

    17. 网络拓扑结构:分支结构不属于常见的网络拓扑结构形式,常见的有星形、环形、总线形等(正确答案:D)。 18. Word快捷键:Ctrl+Home组合键可以将插入光标快速移动到文档开头。 19. Word绘图工具栏:单击常用...

    2021-2022计算机二级等级考试试题及答案No.15993.docx

    4. 结构化分析(Structured Analysis,SA)是一种软件开发方法,常用的工具包括判定树、数据字典和PAD图,但数据流图(Data Flow Diagram, DFD)也是结构化分析的一部分,所以选项C是错误的。 5. 在Visual FoxPro中...

    2021-2022计算机二级等级考试试题及答案No.17641.docx

    11. 网络分类:按拓扑结构分类,计算机网络可以分为总线网、环形网和星形网等。 12. HTML标题标记:在HTML文档中,表示页面标题的标记对是`<title>`和`</title>`。 13. 数据操作:日期型数据可以加减整数,例如...

    2021-2022计算机二级等级考试试题及答案No.16260.docx

    9. 网络分类:网络根据拓扑结构可以分为总线型、环形、星形、树形和网状网。 10. 计算机病毒:良性病毒不会破坏系统,但可能影响系统性能。 11. Word2000 功能:Word 允许用户使用鼠标和键盘移动插入点,方便文档...

    事业单位计算机网络考试.doc

    计算机网络的拓扑构型包括总线型、环形、星形、树形和网状等,每种结构都有其特定的应用场景和优缺点。网络的分类主要包括局域网(LAN)、城域网(MAN)和广域网(WAN),以及近年来新兴的无线网络和移动网络。 ...

    2021-2022计算机二级等级考试试题及答案No.3420.docx

    15. 网络拓扑结构:常见的有星形、环形、总线形,但没有“分支”这种形式。 16. VBA过程:Sub过程和Function过程都是VBA中定义的代码块,可以公开(Public)、私有(Private)或静态(Static)。 17. 文本框事件:...

    2021-2022计算机二级等级考试试题及答案No.4904.docx

    22. 网络拓扑结构通常包括星形、环形和总线形,分支不属于常见的网络拓扑结构。 23. 测试数据属于软件开发中的辅助资源,是确保软件质量的重要组成部分。 以上知识点详细介绍了计算机二级等级考试中的部分重要内容...

    java_algorithms_practice:我的沙箱可用来审查经典算法,审查数据结构并解决问题

    6. 图结构:表示对象之间的关系,常用于网络拓扑、社交网络分析等场景。 三、实战问题 本项目中的实战问题可能涵盖各种实际场景,如: 1. 图像处理:如图像搜索、相似度计算等,涉及图像特征提取和匹配算法。 2. ...

Global site tag (gtag.js) - Google Analytics