Flex拖动技术大全(2)

来源:互联网 发布:城市规划作品集 知乎 编辑:程序博客网 时间:2024/04/27 16:46

2.非加强拖动技术
Label的拖动,可以扩展到其他组件

Button的拖动,可以扩展到其他组件

[html] viewplaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  
  3.                 layout="vertical"  
  4.                 verticalAlign="middle"  
  5.                 fontSize="12">  
  6.     <mx:Script>  
  7.         <![CDATA[ 
  8.             import mx.core.IUIComponent; 
  9.             import mx.events.DragEvent; 
  10.             import mx.core.DragSource; 
  11.             import mx.managers.DragManager; 
  12.  
  13.             //拖动初始器 
  14.             private function dragSource(e:MouseEvent, format:String):void 
  15.             { 
  16.                 var iu:IUIComponent=e.currentTarget as IUIComponent; 
  17.                 var ds:DragSource=new DragSource(); 
  18.                 ds.addData({"x": e.localX, "y": e.localY}, format); //设置一个标号format 
  19.                 DragManager.doDrag(iu, ds, e); 
  20.             } 
  21.  
  22.             //当拖进去时 
  23.             private function onEnter(e:DragEvent, format:String):void 
  24.             { 
  25.                 if (e.dragSource.hasFormat(format)) //如果标号为format则接受拖来的物体 
  26.                 { 
  27.                     DragManager.acceptDragDrop(IUIComponent(e.target)); 
  28.                 } 
  29.             } 
  30.  
  31.             //当拖完成时 
  32.             private function onDrop(e:DragEvent, format:String):void 
  33.             { 
  34.                 var myData:Object=new Object(); 
  35.                 myData=e.dragSource.dataForFormat(format); 
  36.                 btn.x=this.mouseX myData.x; //btn为按钮的id,要是扩展到其他组件,改这里就可以了。 
  37.                 btn.y=this.mouseY myData.y; 
  38.             } 
  39.         ]]>  
  40.     </mx:Script>  
  41.     <mx:Canvas y="40"  
  42.                id="cansAccess"  
  43.                backgroundColor="#000000"  
  44.                width="300"  
  45.                height="200"  
  46.                dragEnter="onEnter(event,'formatString')"  
  47.                dragDrop="onDrop(event,'formatString')"/>  
  48.     <mx:Button id="btn"  
  49.                label="拖动我到面板"  
  50.                mouseDown="dragSource(event,'formatString')"/>  
  51.      </mx:Application>  


 

一定要注意,标签的先后位置,Button 要在Canvas之后.


3.Canvas容器中拖动Box,你还可以在Box中添加图片等。

 

[html] viewplaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  
  3.                 layout="absolute"  
  4.                 fontSize="12">  
  5.     <mx:Script>  
  6.         <![CDATA[ 
  7.             import mx.containers.Box; 
  8.             import mx.containers.Canvas; 
  9.             import mx.core.IUIComponent; 
  10.             import mx.events.DragEvent; 
  11.             import mx.managers.DragManager; 
  12.             import mx.core.DragSource; 
  13.  
  14.             //拖动初始器 
  15.             private function dragSource(e:MouseEvent, format:String):void 
  16.             { 
  17.                 var iu:IUIComponent=e.currentTarget as IUIComponent; 
  18.                 var ds:DragSource=new DragSource(); 
  19.                 ds.addData(iu, format); //设置一个标号format 
  20.                 DragManager.doDrag(iu, ds, e); // 开始拖动这个物体 
  21.             } 
  22.  
  23.             //当拖进去时 
  24.             private function onEnter(e:DragEvent, format:String):void 
  25.             { 
  26.                 if (e.dragSource.hasFormat(format)) //如果标号为format则接受拖来的物体 
  27.                 { 
  28.                     DragManager.acceptDragDrop(IUIComponent(e.target)); // 接受被拖进来的物体       
  29.                 } 
  30.             } 
  31.  
  32.             //当拖完成时 
  33.             private function onDrop(e:DragEvent, format:String):void 
  34.             { 
  35.                 var box:Box=Box(e.dragInitiator); //如果扩展到其他组件,改这里Box就可以了。 
  36.                 box.x=e.localX; 
  37.                 box.y=e.localY; 
  38.             } 
  39.         ]]>  
  40.     </mx:Script>  
  41.   
  42.     <mx:Canvas backgroundColor="0xEEEEEE"  
  43.                width="500"  
  44.                height="246"  
  45.                horizontalCenter="0"  
  46.                verticalCenter="0"  
  47.                dragEnter="onEnter(event,'boxFormat')"  
  48.                dragDrop="onDrop(event,'boxFormat')">  
  49.         <mx:Box id="boxDrag"  
  50.                 width="20"  
  51.                 height="20"  
  52.                 backgroundColor="0x00FFCC"  
  53.                 x="97"  
  54.                 y="47"  
  55.                 mouseDown="dragSource(event,'boxFormat');">  
  56.         </mx:Box>  
  57.     </mx:Canvas>  
  58.      </mx:Application>  


 

4.图片的拖动

 

[html] viewplaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  
  3.                 layout="vertical"  
  4.                 width="100%"  
  5.                 height="100%"  
  6.                 fontSize="12">  
  7.     <mx:Script>  
  8.         <![CDATA[ 
  9.             private var oldX:Number; //拖动开始是的坐标 
  10.             private var oldY:Number; 
  11.  
  12.             //拖动开始 
  13.             private function dragStart(event:MouseEvent):void 
  14.             { 
  15.                 oldX=event.stageX; //相对Application的坐标 
  16.                 oldY=event.stageY; 
  17.             } 
  18.  
  19.             //拖动结束 
  20.             private function dragEnd(event:MouseEvent):void 
  21.             { 
  22.                 lbl.text="Local (x,y):" event.localX.toString() "," event.localX.toString(); //相对图片的坐标 
  23.                 lbl2.text="Stage (x,y):" event.stageX.toString() "," event.stageY.toString(); //相对Application的坐标 
  24.                 if (event.buttonDown) 
  25.                 //如果鼠标在移动过程中并且按下,也就是说鼠标的拖动事件。 
  26.                     var x:Number=event.stageX oldX; //相对Application的坐标的移动量 
  27.                     var y:Number=event.stageY oldY; 
  28.                     oldX=event.stageX; //更新拖动开始是的坐标 
  29.                     oldY=event.stageY; 
  30.                     img.move(img.x x, img.y y); //img是 Image的id,如果扩展到其他组件,改这里就可以了。 
  31.                 } 
  32.             } 
  33.         ]]>  
  34.     </mx:Script>  
  35.     <mx:Label x="10"  
  36.               y="10"  
  37.               text=""  
  38.               id="lbl"/>  
  39.     <mx:Label x="10"  
  40.               y="27"  
  41.               text=""  
  42.               id="lbl2"/>  
  43.     <mx:Panel x="257"  
  44.               y="71"  
  45.               width="700"  
  46.               height="80%"  
  47.               layout="absolute"  
  48.               horizontalScrollPolicy="off"  
  49.               verticalScrollPolicy="off"  
  50.               title="图片在面板中的拖动例子"  
  51.               fontSize="12">  
  52.         <mx:Image id="img"  
  53.                   x="0"  
  54.                   y="0"  
  55.                   source="test.JPG"  
  56.                   mouseMove="dragEnd(event)"  
  57.                   mouseDown="dragStart(event)"/>  
  58.     </mx:Panel>  
  59.      </mx:Application>  


 


原创粉丝点击