加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex tree拖动

发布时间:2020-12-15 04:34:14 所属栏目:百科 来源:网络整理
导读://moveTree.mxml文件 ?xml version="1.0" encoding="utf-8"??? mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="15"? ????xmlns:comp="com.components.moveTree.*" xmlns:component="com.component.*"?? ?mx:Script?

//moveTree.mxml文件

<?xml version="1.0" encoding="utf-8"?>??
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="15"?
????xmlns:comp="com.components.moveTree.*" xmlns:component="com.component.*">??
?<mx:Script>??
??<![CDATA[??
???import mx.events.DragEvent;??
???import mx.managers.DragManager;??
???import mx.core.DragSource;??
???import mx.events.DragEvent;??
???private function dropDrag(event:DragEvent):void {??
????tree.hideDropFeedback(event); //取消默认画线??
???}??
??]]>??
?</mx:Script>??
?<mx:XMLListCollection id="xmlColl" source="{xmlList}"/>??
?<mx:XMLList id="xmlList" xmlns="">??
??<rootdata name="北京XX总局"? position="教授" isBranch="true">?
???<subdata?? name="大队1"? isBranch="true" >??
???<data? name="中队1-1"/>
???<data? name="中队1-2"/>
???<data? name="中队1-3"/>
???</subdata>
???<subdata?? name="大队2"? isBranch="true" >??
????<data? name="中队2-1"/>
???</subdata>
??</rootdata>
??<rootdata name="信息分类" isBranch="true">??
???<subdata id="01" name="Flash" isBranch="true">??
????<data id="0101" name="Flash1" />??
????<data id="0102" name="Flash2" />??
???</subdata>??
???<subdata id="01" name="相册" isBranch="true">??
????<data id="0104" name="相册1" />??
????<data id="0104" name="相册2" />??
???</subdata>??
???<subdata id="02" name="服务" isBranch="true">??
????<data id="0201" name="GIS服务" />??
????<data id="0202" name="arcgis服务" />??
???</subdata>??
????
??</rootdata>??
?</mx:XMLList>?
?<mx:HBox horizontalAlign="center" verticalAlign="middle" paddingLeft="15" paddingRight="15" dropShadowVisible="true" height="90%" width="100%">
??
?
?<mx:HBox width="100%" height="100%" horizontalAlign="left" verticalAlign="middle">
??

?<mx:Panel width="250" height="100%" verticalAlign="middle" horizontalAlign="center" title="结构" chromeColor="#020202" color="#FFFFFF">
??
?
? <component:moveTree
? id="tree" labelField="@name" width="100%"?
? disclosureOpenIcon="@Embed(source='img/disclosure-open.png')"
? disclosureClosedIcon="@Embed(source='img/disclosure-closed.png')"
????? height="100%" dragEnabled="true" dropEnabled="true"?
????? dragMoveEnabled="true" dragDrop="dropDrag(event);" dataProvider="{xmlColl}" dropShadowVisible="true" borderVisible="false" color="#010101"/>?
?</mx:Panel>
?</mx:HBox>
?</mx:HBox>
</mx:Application>?
?

?

//moveTree.as

package com.component
{
?import mx.collections.ICollectionView;??
?import mx.collections.IViewCursor;??
?import mx.controls.Tree;??
?import mx.core.mx_internal;??
?import mx.events.DragEvent;??
?
?import mx.managers.DragManager;??
? use namespace mx_internal; //命名空间??
?
?public class moveTree extends Tree {??
??
??public function moveTree() {??
???super();??
??}??
??/**?
?? *? @private?
?? *? Returns the stack of parents from a child item.?
?? */?
??private function getParentStack(item:Object):Array {??
???var stack:Array = [];??
???if (item == null)??
????return stack;??
???
???var parent:* = getParentItem(item);??
???while (parent) {??
????stack.push(parent);??
????parent = getParentItem(parent);??
???}??
???return stack;??
??}??
??override protected function dragDropHandler(event:DragEvent):void {??
???
???if (event.dragSource.hasFormat("treeItems")) {??
????var items:Array = event.dragSource.dataForFormat("treeItems") as Array;??
????var i:int;??
????var n:int;??
????
????if (event.action == DragManager.MOVE && dragMoveEnabled) {??
?????if (event.dragInitiator == this) {??
???????calculateDropIndex(event);??
????
??????var index:int;??
??????var parent:*;??
??????var parentItem:*;??
??????
??????var dropIndex:int = _dropData.index;??
??????
??????// 获得 拖动目标 项的父节点? 。??
??????var dropParentStack:Array = getParentStack(_dropData.parent);??
??????dropParentStack.unshift(_dropData.parent); //将父节点添加到数组的开头??
??????n = items.length;??
??????for (i = 0;i < n;i++) {??
???????parent = getParentItem(items[i]); //获得父节点??
???????index = getChildIndexInParent(parent,items[i]); //获得父节点的索引号??
???????
???????var item:* = items[i];??
???????var itemName:String = item.localName().toString(); //??
???????var targetParent:*;??
???????if(itemName == "rootdata"){
????
???????removeChildItem(parent,items[i],index);??

???????if (parent == _dropData.parent && index < _dropData.index)?? ????????dropIndex--;?? ??????? ???????addChildItem(targetParent,dropIndex);?? ?????????????????? ???????????? } ???????for each (parentItem in dropParentStack) {?? ???? ????????// 不能把节点放到自身的子节点下面?? ????????if (items[i] === parentItem)?? ?????????return;?? ???????? ????????if (parentItem) {?? ?????????var targetParentName:String = parentItem.localName().toString();?? ?????????if (itemName == "data" && targetParentName == "subdata") {?? ??????????targetParent = parentItem;?? ??????????break;?? ?????????}?? ?????????if (itemName == "subdata" && targetParentName == "rootdata") {?? ??????????targetParent = parentItem;?? ??????????break;?? ?????????}?? ????????}?? ???????? ???????}?? ??????? ???????if (targetParent) {? ????????removeChildItem(parent,index);?? ???? ????????if (parent == _dropData.parent && index < _dropData.index)?? ?????????dropIndex--;?? ???????? ????????addChildItem(targetParent,dropIndex);?? ???????}?? ??????}?? ?????? ??????return;?? ?????}?? ????}?? ???? ? ????lastDragEvent = null;?? ???}?? ??}?? ??/**? ?? *? @private? ?? *? Finds the index distance between a parent and child? ?? */? ??private function getChildIndexInParent(parent:Object,child:Object):int {?? ???var index:int = 0;?? ???if (!parent) {?? ????var cursor:IViewCursor = ICollectionView(iterator.view).createCursor();?? ????while (!cursor.afterLast) {?? ?????if (child === cursor.current)?? ??????break;?? ?????index++;?? ?????cursor.moveNext();?? ????}?? ???} else {?? ????if (parent != null && _dataDescriptor.isBranch(parent,iterator.view) && _dataDescriptor.hasChildren(parent,?? ?????iterator.view)) {?? ?????var children:ICollectionView = getChildren(parent,iterator.view);?? ?????if (children.contains(child)) {?? ??????cursor = children.createCursor();?? ??????while (!cursor.afterLast) {?? ???????if (child === cursor.current)?? ????????break;?? ???????cursor.moveNext();?? ???????index++;?? ??????}?? ?????? ?????} else {?? ???????? ?????}?? ????}?? ???}?? ???return index;?? ??}?? ?}?? }?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读