使用

require("MyAapp.DepTree", function (DepTree) {
DepTree(({
renderTo: "holder",
width: "820",
height: "580",
data: [
{ "name": "System" },
{ "name": "Util" },
{ "name": "System.Model", "deps": ["System", "Util"] },
{ "name": "System.Model.Animate", "deps": ["System.Model"] },
{ "name": "System.Model.User", "deps": ["System.Model.Animate", "Util"] },
{ "name": "OurApp", "deps": ["System.Model.User", "Util"] }
]
}))
});

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

其中:

renderTo是容器

width和height是容器的宽高

data是模块和依赖关系

使用时候请自行引用http://raphaeljs.com/

预览

其中,引用关系自下而上,上面的模块引用下面的模块,粗的线条代表相邻level之间有引用关系,细线代表跨级(level)间的引用关系。

技术细节

此工具完全基于http://raphaeljs.com/开发,所以兼容性良好,raphaeljs支持IE6+,但是由于ie678不支持svg元素的getBBox来获取text的宽高,所以在老版本ie下几乎不能直视,所以建议使用现代浏览器。

树状程序设计:

要生成树状依赖关系图,要经过下面程序步骤:

1.找到最底层的模块,也就是level为0,他们不依赖于任何模块

2.从最底层开始,递归找引用上层的模块,依次向上,目的就是计算每一模块的level,是该层必须满足

      a.必须依赖上一层   

      b.不依赖同层或者其他层的

      c.level++

依赖线条的绘制:

经过上面的管线,每个模块的level遍历出来,当绘制依赖于线条的时候,根据level之差决定绘制粗线还是细线,也决定了线条的颜色。

布局自动适应:

其中,布局自动使用依赖于getBBox获取svg文本元素的高度和宽度,计算各种宽度与间距,ie678不支持,便只好放弃ie678。

文本的圆角背景的宽高由文本的宽高决定

文字与圆角背景的容器之间的左右间距由每一层(level)的模块的个数决定

文字与圆角背景的容器之间的上下间距由max level的数值决定

在线演示

传送门:http://htmlcssjs.duapp.com/demo50/index.html

DepTree.js下载:http://htmlcssjs.duapp.com/demo50/deptree.js

最新文章

  1. Python学习笔记——集合类型
  2. openjdk 完全编译指南
  3. 搭建TestNG环境( 一)
  4. 在windows下面配置redis集群遇到的一些坑
  5. 在CentOS上安装ZooKeeper集群
  6. linux 权限操作
  7. 重命名PDF打印文件名
  8. mysql创建外键出错(注意数据库表字段排序)
  9. C++之创建对象时的new与不new
  10. linux scp 服务器远程拷贝
  11. oracle的存储过程语法(转)
  12. win7 64下安装mysql-python报错的解决办法
  13. machine learn in python 第二章2.1.1
  14. MySQL优化三(InnoDB优化)
  15. C#与Oracle数据库
  16. IronPython初体验
  17. OSPF基础介绍
  18. Web API 入门 一
  19. 手机闪存速度测试工具,AndroBench
  20. 棋盘状态压缩dp

热门文章

  1. HTML5_03之Canvas绘图
  2. OLE DB Command transformation 用法
  3. Vue 方法与事件处理器
  4. Eclipse迁移到Android studio步骤如下:
  5. .Net 转战 Android 4.4 日常笔记(10)--PullToRefresh下拉刷新使用
  6. 借助node实战JSONP跨域
  7. 坑爹的Maven
  8. Lua 学习笔记(五)函数
  9. xcode6 使用MJRefresh,Too many arguments to function call, expected 0, have *
  10. WebGIS中利用AGS JS+eChart实现一些数据展示的探索