jTopo 使用记录

715 阅读1分钟

目前web画图功能都是基于canvas或svg实现。最近需要实现一个拓扑图功能,所以对这方面了解并记录下来。

常见开源画图工具

GoJS :基于canvas的作图工具,api丰富文档详细是一款不错的开发工具
Raphaël:基于svg的作图工具,文档还是比较详细,在github上表现不错
le5le:一款国产的开源工具,整体来说还是不错的

Jtopo开发工具

Jtopo是一款完全免费的拓扑图形化界面开发工具

优点:简单好用,基于几个核心类,可以扩展出丰富的功能

缺点:文档不够详细,只能通过demo了解使用;对于一些样式自定义一般,如:选中的样式、告警等;工具只能通过script标签方式引入项目

Jtopo 使用

  • 在官网下载最新压缩包
  • 实现demo
<script src="./jtopo-0.4.8-min.js"></script>

<canvas id="canvas" width="500" height="500"></canvas>

<script>
  var canvas = document.getElementById('canvas'); 
  var stage = new JTopo.Stage(canvas); // 创建一个舞台对象
  var scene = new JTopo.Scene(stage); // 创建一个场景对象
  scene.backgroundColor = '0, 0, 0'
  scene.background = 'http://www.jtopo.com/demo/img/bg.jpg'

  var node = new JTopo.Node("Hello");    // 创建一个节点
  node.setLocation(100, 50);    // 设置节点坐标                    
  scene.add(node); // 放入到场景中

  var circle = new JTopo.CircleNode("circle");    // 创建一个圆形节点
  circle.setLocation(400, 200);    // 设置节点坐标                    
  scene.add(circle); // 放入到场景中

  var link = new JTopo.FlexionalLink(node, circle, '二次折线'); // 创建一个二次折线
  link.direction = 'vertical'; // 连线方式水平 (垂直:horizontal)
  link.arrowsRadius = 10; // 箭头
  link.lineWidth = 3; // 线宽
  link.offsetGap = 35;
  link.bundleOffset = 100; // 折线拐角处的长度
  link.bundleGap = 15; // 线条之间的间隔
  link.textOffsetY = 10; // 文本偏移量(向下15个像素)
  link.strokeColor = '255,255,0';
  link.dashedPattern = 10;  // 虚线(数字表示虚线间隔)
  scene.add(link);
</script>

常见问题

  1. canvas自适应

    • canvas 只能通过设置属性 width 和 height来控制宽高,不可以在style中设置宽度高度,这样会将整个 canvas 拉伸。

    解决方案: 在 canvas 外套一个div,可以通过监听外出div变化给 canvas 的width 和 height 属性赋值的方式实现canvas自适应。

  2. 场景背景问题

    • 场景是通过 backgroundColor 属性来添加背景色,background 属性来添加背景图。但是backgroundColor 常常无效并且不使用 background 属性常常又会出现莫名错误。

    解决方案:背景色可以通过设置 canvas 的 css 样式实现;如果不用背景图也要写上 scene.background = '' 的属性,避免出现报错问题