网络拓扑图上文本的巧妙应用

开发 前端
在前端网页设计中,文本是重要的组成部分,那么在网络拓扑图中也是一样的,文本在网络拓扑图上最基本的显示功能之一,在不同的应用场景下,会有不同的需求。但是不同的需求也逃不过一些基础设置,如位置、旋转、字体、颜色等需求。接下来我们就来详细聊聊 HT for Web 中文本的相关应用。

在前端网页设计中,文本是重要的组成部分,那么在网络拓扑图中也是一样的,文本在网络拓扑图上最基本的显示功能之一,在不同的应用场景下,会有不同的需求。但是不同的需求也逃不过一些基础设置,如位置、旋转、字体、颜色等需求。接下来我们就来详细聊聊 HT for Web 中文本的相关应用。

HT for Web 为网络拓扑图上的节点提供了两个文本,也确实需要两个文本同时存在的情况,比如车站上面的站牌,就有汉字和拼音的组合,如果做一个公交站示意图的话,节点上的两个文本就都用得上了。今天就模拟一个地铁站点和大家一起聊聊网络拓扑图上的文本应用。

今天拿来说明的 Demo 链接:http://www.hightopo.com/demo/...

[[172540]]

 

从上图可以看出,文本有各种各样的需求,有可能还有其他更复杂的需求,在这边我就抽取几种需求来具体描述下,那我们一步一步来调效果,先从厦门这个站点开始吧。

  1. node.s({ 
  2.     'label''厦门'
  3.     'label2''Xiamen' 
  4. });  

网络拓扑图的创建及节点的创建我这边就不再多描述了,我们直奔主题,先设置 Node 上面的两个文本看看效果。 

[[172541]]

 如上图,可以发现连个文本是在 Node 上不同的位置,显然这样子不是我们想要的效果,那文本的位置又该怎么去定义呢?这时就需要移步到我们的《位置手册》(http://www.hightopo.com/guide...)来了解相关的设置及含义。在我们的风格手册中的 ht.Style 章节有描述 label 和 label2 的位置默认值,label.position 的默认值是 31,label2.position 的默认值是 34,在位置手册中找到两个 label 需要摆放的位置,然后设置到 Node 上就可以了。那么根据前面总体效果图中的厦门站点,可以发现两个 label 的位置都是在中下方,所以两个 lable 的 position 都应该设置为 31,当设置两个文本的 position 都为 31 的话,会发现连个文本是重叠的,这肯定不是我们想要的效果。仔细阅读风格手册,会发现连个 label 都有 offset.x 和 offset.y 连个属性,这两个属性很好理解,就是用来设置文本的偏移值的。

  1. node.s({ 
  2.     'label''厦门'
  3.     'label2''Xiamen'
  4.     'label2.position': 31, 
  5.     'label2.offset.y': 15 
  6. });  

我们对 label2 设置了 position 属性为 31,和 label 的 position 属性默认值一样,并且设置了 label2 的 offset.y 属性,让 label2 向下便宜 15 个像素。

[[172542]]

 上图的文本位置看起来舒服多了,但是感觉还是不对,没有主次之分,是不是应该将 label 的文本大小设置大一点,别让拼音抢了风头,两个文本都有 font 属性可以设置,而且默认值都是 12px arial, sans-serif。

  1. node.s({ 
  2.     'label''厦门'
  3.     'label.font''22px arial, sans-serif'
  4.     'label2''Xiamen'
  5.     'label2.position': 31, 
  6.     'label2.offset.y': 23 
  7. });  

我们将 label 的 font 属性适当地讲字体调大了,自然 label2 的偏移值也需要做些调整,不然两个文本就又叠在一起了。

[[172543]]

 上图的效果看着顺眼多了。

[[172544]]

 看上图,我们又多搞了几个 label 样式,和前面的 label 参数差不多,就中间的两个文本样式多了个 rotation,还有一个文本换行。

  1. var list = [], node; 
  2. for (var i = 0; i < 4; i++) { 
  3.     node = new ht.Node(); 
  4.     node.setImage('station'); 
  5.     node.p(100 + i * 100, 100); 
  6.     dm.add(node); 
  7.  
  8.     list.push(node); 
  9. node = list[0]; 
  10. node.s({ 
  11.     'label''厦门'
  12.     'label.font''22px arial, sans-serif'
  13.     'label2''Xiamen'
  14.     'label2.position': 31, 
  15.     'label2.offset.y': 23 
  16. }); 
  17.  
  18. node = list[1]; 
  19. node.s({ 
  20.     'label''图\n扑'
  21.     'label.position': 14, 
  22.     'label.font''22px arial, sans-serif'
  23.     'label2''Hightopo'
  24.     'label2.position': 14, 
  25.     'label2.offset.x': -7, 
  26.     'label2.rotation': -Math.PI / 2 
  27. }); 
  28.  
  29. node = list[2]; 
  30. node.s({ 
  31.     'label''上\n海'
  32.     'label.position': 20, 
  33.     'label.font''22px arial, sans-serif'
  34.     'label2''Shanghai'
  35.     'label2.position': 20, 
  36.     'label2.offset.x': 6, 
  37.     'label2.rotation': -Math.PI / 2 
  38. }); 
  39.  
  40. node = list[3]; 
  41. node.s({ 
  42.     'label''北京'
  43.     'label.position': 3, 
  44.     'label.font''22px arial, sans-serif'
  45.     'label2''Beijing'
  46.     'label2.position': 3, 
  47.     'label2.offset.y': -23 
  48. }); 

 从上面的代码可以看到,在“图扑”和“上海”两个节点的 label 都加了“n”回车转义字符,在 HT 的内部实现中,有对“n”回车转义字符做解析处理,让文本在表现上可以换行显示。

***就是站点之间的连线处理了,连线可以通过设置 Edge 的样式 edge.points 和 edge.segments 两个属性来实现,在我们的《入门手册》(http://www.hightopo.com/guide...)中有说明其具体用法,可以一步阅读,这不是今天的重点,在这边就不详细说明了。

  

  1. var bj_sh = new ht.Edge(bj, sh); 
  2. bj_sh.s(cloneObj(edgeStyle, { 
  3.     'edge.points': [ 
  4.         { x: 280, y: 50 }, 
  5.         { x: 280, y: 100 }, 
  6.         { x: 280, y: 150 } 
  7.     ], 
  8.     'edge.segments': [1, 3, 3] 
  9. })); 
  10. dm.add(bj_sh); 
  11.  
  12. var sh_xm = new ht.Edge(sh, xm); 
  13. sh_xm.s(cloneObj(edgeStyle, { 
  14.     'edge.points': [ 
  15.         { x: 500, y: 150 }, 
  16.         { x: 200, y: 450 } 
  17.     ], 
  18.     'edge.segments': [1, 4] 
  19. })); 
  20. dm.add(sh_xm); 
  21.  
  22. var xm_tp = new ht.Edge(xm, tp); 
  23. xm_tp.s(cloneObj(edgeStyle, { 
  24.     'edge.points': [ 
  25.         { x: 70, y: 430 }, 
  26.         { x: 100, y: 400 } 
  27.     ], 
  28.     'edge.segments': [1, 4] 
  29. })); 
  30. dm.add(xm_tp);  

如上代码,通过 Edge 将节点连接起来,并设置其 edge.points 和 edge.segments 两个样式,从而达到文章开头的示意图那样的效果,当然站点也是需要设置到相应的位置。在这边需要注意的是,edge.points 属性是没有包含起点和终点的,所以,你可以看到上图中的代码,按照 edge.segments 属性计算出来的点个数和 edge.points 的数组个数是不一样的,而且总是相差 2。

虽然源码不长,但是由于篇幅的原因,这里就不贴源码了,感兴趣的同学可以到我们的官网上查看 Demos 的源码,Demo 的具体链接如下:http://www.hightopo.com/demo/...

责任编辑:庞桂玉 来源: segmentfault
相关推荐

2019-07-03 10:16:11

网络监控拓扑图

2009-03-02 15:44:20

网络拓扑Visio技术Microsoft V

2009-06-22 17:15:50

Java Applet拓扑图

2021-02-01 09:13:34

Zabbix5.2拓扑图运维

2009-06-29 14:30:42

网络拓扑KoolPoint摩卡

2009-02-20 15:15:32

2019-10-25 16:50:51

网络安全网络安全技术周刊

2010-12-15 11:24:35

2009-03-02 16:22:18

网络拓扑网络管理摩卡软件

2009-06-30 09:46:00

网络拓扑酷点摩卡

2019-09-05 11:14:12

监控系统拓扑图

2010-07-05 16:30:45

BGP协议

2010-03-30 13:59:45

2009-03-17 09:43:13

网络拓扑定位摩卡

2010-11-15 12:12:18

2010-06-29 10:15:31

局域网故障

2010-08-31 16:57:13

DHCP SNOOPI

2009-02-19 10:14:00

2012-06-04 10:09:11

无线网络
点赞
收藏

51CTO技术栈公众号