`
iMzw
  • 浏览: 193966 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

OrgChart(组织机构图) - Flex

    博客分类:
  • Flex
阅读更多


前段时间,用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
6
0
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    基于vue-orgchart库来创建组织架构图demo源码.zip

    基于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,支持平移拖动和缩放.zip

    vue-orgchart库来创建组织架构图demo源码,支持导出png或pdf,支持平移拖动和缩放 使用依赖: 1. vue.js:Vue.js的核心库。 2. vue-orgchart.min.js:vue-orgchart库的核心文件,用于生成组织架构图。 3. ...

    组织树结构 OrgChart-master 完整代码demo

    本资源“OrgChart-master”提供了一个完整的代码示例,用于创建动态的、可拖拽的组织树结构,具备折叠、展开功能,并支持鼠标右键自定义操作。下面将详细阐述相关知识点: 1. **组织树结构**:组织树结构是展示组织...

    orgchart 组织架构图 demo 实例

    orgchart 组织架构图 demo 实例 orgchart 组织架构图 demo 实例 orgchart 组织架构图 demo 实例 orgchart 组织架构图 demo 实例 orgchart 组织架构图 demo 实例

    orgchart.js 组织架构图之JQuery插件

    组织架构图之JQuery插件组织架构图之JQuery插件组织架构图之JQuery插件组织...组织架构图之JQuery插件orgchart.js orgchart.js orgchart.js orgchart.js orgchart.js orgchart.js orgchart.js orgchart.js orgchart.js ...

    VueOrgChart一个对树形组织图OrgChartjs封装并修改的Vue2x组件

    OrgChart.js是原生的JavaScript库,它提供了创建和操作组织结构图的基本功能。VueOrgChart将其与Vue.js结合,利用Vue的数据绑定和组件化特性,使得在Vue应用中动态更新和管理组织图变得更加简便。通过这个组件,...

    jQuery组织结构图表插件OrgChart

    jQuery组织结构图表插件OrgChart是一款强大的前端工具,专门用于创建直观、动态的组织结构图。这个插件基于流行的JavaScript库jQuery,使得开发者能够轻松地在网页上展示公司的层级关系、团队成员分布或其他类似的...

    OrgChart-简单实用的组织结构图表jQuery插件

    OrgChart是一款专为构建组织结构图表而设计的jQuery插件,它简化了在网页中创建可视化组织架构的过程。这个插件充分利用DOM元素、jQuery选择器和CSS3的过渡效果,提供了一种高效且美观的方式来展示人员关系和层级...

    org.springframework.flex-1.0.3.RELEASE.jar.zip

    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-demo简单demo" 是一个基于 `orgchart.js` 库实现的组织结构图示例项目。这个项目旨在展示如何使用 `orgchart.js` 来创建类似于企查查官网上的公司组织结构图。它完全由开发者手工编写,可能存在...

    jQuery组织结构图表插件OrgChart.zip

    jQuery组织结构图表插件OrgChart是一款基于jQuery的高效、易用的图表展示工具,尤其适用于构建企业或项目的组织架构图。该插件以其灵活的配置选项和丰富的自定义功能,为开发者提供了便捷的方式来创建和展示层次分明...

    vue-org-chart:管理和发布您的交互式组织结构图(orgchart),100%免费,无需安装

    vueOrgChart 组织结构图:无需网络服务器和数据库即可生成和发布orgchart的完整解决方案(c)Michael Hoogkamer 这是在线有关更多信息,请参见您要显示(敏捷)团队而不是组织架构图吗? 尝试: 开源。构建设置仅当...

    OrgChart组织图

    OrgChart组织图是一种用于展示组织结构的图形化表示方式,它清晰地呈现了各个部门、职位以及人员之间的层级关系。在计算机编程中,实现OrgChart的功能通常涉及到数据结构、图形界面设计以及用户交互等多个方面。这里...

    组织架构图orgchart.min.js

    组织架构图orgchart.min.js

    react-orgchart

    在.orgchart-container中添加一个可选的额外类名,结果可能看起来像class =“ orgchart-container xxx yyy”。 可折叠的 布尔值 真的 允许扩展/折叠节点。 数据源 目的 数据源用于构建orgchart的结构。 可拖动的 ...

    组织机构图控件 OrgChart

    组织机构图控件 OrgChart ,Dll+2005使用实例:C#

    orgchart flex

    "orgchart flex" 提供了一种高效的方法来展示流程图、组织机构图以及工作流。本文将深入探讨Flex AS3环境下如何创建和实现这些图形。 一、Flex简介 Flex是由Adobe开发的一款开源框架,主要用于构建富互联网应用程序...

    OrgChartjs这是一个简单直接的组织结构图插件

    OrgChart.js 是一款轻量级且易于使用的JavaScript库,专门设计用于创建组织结构图。这款插件能够帮助开发者快速地在网页上展示清晰、直观的人员或机构层级关系,适用于企业内部管理、团队结构展示、项目组分配等各种...

    jquery.orgchart.js

    《jQuery OrgChart.js:构建灵活组织结构图的利器》 OrgChart.js 是一款基于 jQuery 的高效、可定制化的组织结构图插件。它允许开发者轻松地在网页上展示层次分明的组织架构,如公司部门、团队成员关系或者任何具有...

Global site tag (gtag.js) - Google Analytics