flex拖拽实例
Flex 拖拽
2011-03-11 22:40
前言 相关概念 DragSource DragEvent 按照逻辑,拖拽中至少有两个对象:一方提供数据,一方接收数据。 ? 提供数据 mouseMove??????? 鼠标移动。 dragComplete???? 鼠标释放。判断目标是否接受数据,如果可以,拖放成功。 接收方阶段 dragDrop????????? 鼠标在目标上松开。 dragOver????????? 鼠标移动到目标上。 dragExit??????????? 独享被拖离目标范围。 ? 基本流程 a)???????? 初始化 DragSource ,把需要传递的数据使用 addData 的方式添加进 DragSource b)???????? 把拖拽源和 DragSource 通过静态方法 doDrag 增加到 DragManager 。 2.?????? 监听目标组件的 dragEnter 事件 a)???????? 判断 DragSource 与释放目标的 format 是否一致 b)???????? 如果 format 类型一致则使用 DragManager 的静态方法 acceptDragDrop 允许目标组件接收拖拽。 3.?????? 监听目标组件的 dragDrop 事件 a)???????? 取得拖拽时 DragSource 中的数据,进行操作。 下面是一个很简单的小例子: <?xml?version="1.0"?encoding="utf-8"?> 但是,拖拽管理器还能定制化到特定的控件之上,比如Image,Datagrid等,下面则是一个定制化的例子:代码如下: <?xml?version="1.0"?encoding="utf-8"?> <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"?width="400"?height="400"?backgroundColor="#FFFFFF"?creationComplete="initApp()"?layout="absolute"> ??<mx:Script> ????<![CDATA[ ??????import?mx.controls.DataGrid; ??????import?mx.controls.Image; ??????import?mx.collections.ArrayCollection; ??????import?mx.events.DragEvent; ??????import?mx.managers.DragManager; ??????import?mx.core.DragSource; ??????[Bindable] ??????public?var?total:Number=0; ??????[Bindable] ??????public?var?cartContents:ArrayCollection; ??????private?function?initApp():void{ ????????this.cartContents=new?ArrayCollection(); ??????} ??????private?function?dragIt(event:MouseEvent,name:String,price:Number):void{ ????????//CurrentTarget指定要实现拖拽事件的初始化目标 ????????var?dragInitiator:Image=event.currentTarget?as?Image; ????????//指定一个dragSource来包括拖拽过程中包含的数据的对象 ????????var?dragSource:DragSource=new?DragSource(); ????????//向对象添加数据 ????????dragSource.addData(name,'name'); ????????dragSource.addData(price,'price'); ????????//创建一个拖拽对象的代理作为拷贝 ????????var?dragProxy:Image=new?Image(); ????????dragProxy.source=event.currentTarget.source; ????????//使用DragManager静态方法doDrag开始拖拽 ????????DragManager.doDrag(dragInitiator,dragSource,event,dragProxy); ??????} ??????private?function?dragEnterHandler(event:DragEvent):void{ ????????var?dropTarget:DataGrid=event.currentTarget?as?DataGrid; ????????if?(event.dragSource.hasFormat('name')?&&?event.dragSource.hasFormat('price')){ ??????????DragManager.acceptDragDrop(dropTarget); ????????} ??????} ??????private?function?dragDropHandler(event:DragEvent):void{ ????????var?name:String=?String(event.dragSource.dataForFormat('name')); ????????var?price:Number=Number(event.dragSource.dataForFormat('price')); ????????this.cartContents.addItem({name:String(event.dragSource.dataForFormat('name')),price:String(event.dragSource.dataForFormat('price'))}); ????????total+=price; ??????} ????]]> ??</mx:Script> ??<mx:Canvas?x="19"?y="10"> ??<mx:Image?x="23"?y="35"?width="64"?height="64"?mouseMove="dragIt(event,'Dreamweaver',499);"?source="@Embed(source='../assets/056.png')"/> ??<mx:Label?x="41"?y="107"?text="499"/> ??<mx:Image?x="23"?y="133"?width="64"?height="64"?mouseMove="dragIt(event,'Fireworks',299);"??source="@Embed(source='../assets/057.png')"/> ??<mx:Label?x="41"?y="205"?text="299"/> ??<mx:Image?x="23"?y="231"?width="64"?height="64"?mouseMove="dragIt(event,'Flash',599);"?source="@Embed(source='../assets/059.png')"/> ??<mx:Label?x="41"?y="303"?text="599"/> ??</mx:Canvas> ??<mx:Label?x="210"?y="61"?text="购物篮"?fontSize="12"/> ??<mx:DataGrid?x="129.5"?y="102"?id="cart"?dataProvider="{cartContents}"?dragEnter="dragEnterHandler(event);"?dragDrop="dragDropHandler(event);"?height="165"?fontSize="12"> ????<mx:columns> ??????<mx:DataGridColumn?headerText="产品"?dataField="name"/> ??????<mx:DataGridColumn?headerText="价格"?dataField="price"/> ????</mx:columns> ??</mx:DataGrid> ??<mx:Label?x="186"?y="292"?text="总计:{total}"?fontSize="12"/> ??<mx:Label?x="129.5"?y="0"?text="拖拽物品放入购物篮中"?fontSize="12"/> ??<mx:HRule?x="5"?y="20"?width="390"/> ?? </mx:Application>(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |