前段时间,用Flex写了个OrgChart,截图如下
iLog有个很不错的,可是收钱,799美刀。你可以看这里
http://visudemos.ilog.com/webdemos/orgchart/orgchart.html。
俺农村来的,比较穷,最终还是自己“创造”了一个。
其实算法还是很就简单地,核心就是递归算法。
我写的那个是只能接受XML的。
核心代码:
/**
* create nodes,
* calculate depth.
* */
private function _createSubNodes(data:ICollectionView, parentNode:IOrgChartNode):void{
for(var cursor:IViewCursor = data.createCursor(); !cursor.afterLast; cursor.moveNext()){
var node:IOrgChartNode = _createNode(cursor.current, parentNode);
if(_treeDataDesciptor.isBranch(cursor.current, data)
&& _treeDataDesciptor.getChildren(cursor.current, data).length != 0){
var __tmp:ICollectionView = _treeDataDesciptor.getChildren(cursor.current, data);
_createSubNodes(__tmp, node);
}
}
}
private var _maxX:Number=0;
/**
* Wrap data with IOrgChartNode
* */
private function _createNode(data:Object, parentNode:IOrgChartNode):IOrgChartNode{
var node:IOrgChartNode = new DefaultOrgChartNode();
node.addEventListener(MouseEvent.CLICK, nodeClick);
node.addEventListener(MouseEvent.MOUSE_OVER, nodeMouseOver);
node.addEventListener(MouseEvent.ROLL_OVER, nodeRollOver);
node.addEventListener(MouseEvent.MOUSE_OUT, nodeMouseOut);
node.parentNode = parentNode;
node.data = data;
node.width = hItemWidth;
node.height = hItemHeight;
//起始时,根节点在最左边
if(parentNode == null){
node.x = 0;
node.y = 0;
//_maxX = node.width + _horizonalSpacing;
}else{
if(node.previousSibling == null){
//与父节点在同一中轴线上
//trace(node);
node.x = parentNode.x + (parentNode.width - node.width)/2;
_maxX = node.x + node.width;
}else{
node.x = _maxX + _horizonalSpacing;
_maxX = node.x + node.width;
}
//移动父节点
updateParentNodePosition(node.parentNode );
node.y = parentNode.y + parentNode.height + _verticalSpacing;
}
_nodes.addItem(node);
return node;
}
/**
* 递归移动所有父节点的位置。
* */
private function updateParentNodePosition(node:IOrgChartNode):void{
if(node != null){
var subs:ArrayCollection = node.subNodes;
var lastChild:IOrgChartNode = subs.getItemAt(subs.length - 1 ) as IOrgChartNode;
var firstChild:IOrgChartNode = subs.getItemAt(0) as IOrgChartNode;
node.x = firstChild.x + ( lastChild.x - firstChild.x + lastChild.width - node.width) / 2;
//递归更新直到根节点
updateParentNodePosition(node.parentNode);
}
}
基本就是一个递归右移父节点的算法。
然后把所有的节点统一的Render就OK了。
- 大小: 40.2 KB
分享到:
相关推荐
基于vue-orgchart库来创建组织架构图demo源码: 1. 支持导出png或pdf 2. 支持平移拖动和缩放 使用依赖: 1. vue.js:Vue.js的核心库。 2. vue-orgchart.min.js:vue-orgchart库的核心文件,用于生成组织架构图。 3....
vue-orgchart库来创建组织架构图demo源码,支持导出png或pdf,支持平移拖动和缩放 使用依赖: 1. vue.js:Vue.js的核心库。 2. vue-orgchart.min.js:vue-orgchart库的核心文件,用于生成组织架构图。 3. ...
本资源“OrgChart-master”提供了一个完整的代码示例,用于创建动态的、可拖拽的组织树结构,具备折叠、展开功能,并支持鼠标右键自定义操作。下面将详细阐述相关知识点: 1. **组织树结构**:组织树结构是展示组织...
orgchart 组织架构图 demo 实例 orgchart 组织架构图 demo 实例 orgchart 组织架构图 demo 实例 orgchart 组织架构图 demo 实例 orgchart 组织架构图 demo 实例
组织架构图之JQuery插件组织架构图之JQuery插件组织架构图之JQuery插件组织...组织架构图之JQuery插件orgchart.js orgchart.js orgchart.js orgchart.js orgchart.js orgchart.js orgchart.js orgchart.js orgchart.js ...
OrgChart.js是原生的JavaScript库,它提供了创建和操作组织结构图的基本功能。VueOrgChart将其与Vue.js结合,利用Vue的数据绑定和组件化特性,使得在Vue应用中动态更新和管理组织图变得更加简便。通过这个组件,...
jQuery组织结构图表插件OrgChart是一款强大的前端工具,专门用于创建直观、动态的组织结构图。这个插件基于流行的JavaScript库jQuery,使得开发者能够轻松地在网页上展示公司的层级关系、团队成员分布或其他类似的...
OrgChart是一款专为构建组织结构图表而设计的jQuery插件,它简化了在网页中创建可视化组织架构的过程。这个插件充分利用DOM元素、jQuery选择器和CSS3的过渡效果,提供了一种高效且美观的方式来展示人员关系和层级...
org.springframework.flex-1.0.3.RELEASE.jar.zip用于JAR包,org.springframework.flex-1.0.3.RELEASE.jar.zip用于JAR包org.springframework.flex-1.0.3.RELEASE.jar.zip用于JAR包org.springframework.flex-1.0.3....
【标题】"orgchart-demo简单demo" 是一个基于 `orgchart.js` 库实现的组织结构图示例项目。这个项目旨在展示如何使用 `orgchart.js` 来创建类似于企查查官网上的公司组织结构图。它完全由开发者手工编写,可能存在...
jQuery组织结构图表插件OrgChart是一款基于jQuery的高效、易用的图表展示工具,尤其适用于构建企业或项目的组织架构图。该插件以其灵活的配置选项和丰富的自定义功能,为开发者提供了便捷的方式来创建和展示层次分明...
vueOrgChart 组织结构图:无需网络服务器和数据库即可生成和发布orgchart的完整解决方案(c)Michael Hoogkamer 这是在线有关更多信息,请参见您要显示(敏捷)团队而不是组织架构图吗? 尝试: 开源。构建设置仅当...
OrgChart组织图是一种用于展示组织结构的图形化表示方式,它清晰地呈现了各个部门、职位以及人员之间的层级关系。在计算机编程中,实现OrgChart的功能通常涉及到数据结构、图形界面设计以及用户交互等多个方面。这里...
组织架构图orgchart.min.js
在.orgchart-container中添加一个可选的额外类名,结果可能看起来像class =“ orgchart-container xxx yyy”。 可折叠的 布尔值 真的 允许扩展/折叠节点。 数据源 目的 数据源用于构建orgchart的结构。 可拖动的 ...
组织机构图控件 OrgChart ,Dll+2005使用实例:C#
"orgchart flex" 提供了一种高效的方法来展示流程图、组织机构图以及工作流。本文将深入探讨Flex AS3环境下如何创建和实现这些图形。 一、Flex简介 Flex是由Adobe开发的一款开源框架,主要用于构建富互联网应用程序...
OrgChart.js 是一款轻量级且易于使用的JavaScript库,专门设计用于创建组织结构图。这款插件能够帮助开发者快速地在网页上展示清晰、直观的人员或机构层级关系,适用于企业内部管理、团队结构展示、项目组分配等各种...
《jQuery OrgChart.js:构建灵活组织结构图的利器》 OrgChart.js 是一款基于 jQuery 的高效、可定制化的组织结构图插件。它允许开发者轻松地在网页上展示层次分明的组织架构,如公司部门、团队成员关系或者任何具有...