<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal"> <mx:Script> <!--[CDATA[ import mx.core.BitmapAsset; import mx.core.DragSource; import mx.events.DragEvent; import mx.managers.DragManager; private var xoffset:Number; private var yoffset:Number; private static const FORMAT:String="box"; //DragManager 类用于管理在你的程序里执行的拖拽操作。当一个拖拽操作被初始化,拖拽源 //(drag source)通过静态方法doDrag 增加到DragManager。被称为释放目标(drop target) //的组件了注册事件监听器,从而监听由DragManager 发出的事件。它们接受DragManager //上可用的数据源。 //当<mx:Box>实例发出mouseDown 事件时,mouseDownHandler 方法被调用并且拖拽源数据被 //增加到DragManager。DragManager.doDrag 方法初始一个拖拽操作,需要至少三个参数:拖 //拽初始条目的引用, 一个mx.core.DragSource 对象和调用事件处理器的 //flash.events.MouseEvent 对象。该方法还包括与释放操作相关的鼠标信息。拖拽期间默认 //的被渲染图像是一个具有透明度的矩形。你可以通过doDrag 方法改变这幅图像(也被称为 //拖拽代理),但在这个例子里使用了默认的参数值。 private function mouseDownHandler(evt:MouseEvent):void { xoffset=evt.localX; yoffset=evt.localY; var initiator:Box=evt.currentTarget as Box; var proxyBox:BitmapAsset=new BitmapAsset(); proxyBox.bitmapData=new BitmapData(initiator.width, initiator.height); proxyBox.bitmapData.draw(initiator); var dragSource:DragSource=new DragSource(); dragSource.addData(initiator, FORMAT); DragManager.doDrag(initiator, dragSource, evt, proxyBox, 0, 0, 0.5); } //Canvas 组件是由Box 组件初始的拖拽动作的一个释放目标。它为DragManager 发出的 //dragEnter 和dragDrop 事件指派事件处理器。DragManager 对象的静态方法acceptDragDrop //检查dragEventHandler 方法,拖拽源数据格式,doDrag 方法里的原始集合,以激活拖拽动 //作。acceptDragDrop 方法所需的参数是将要响应拖拽事件的释放目标(drag target)。程 //序的dropHandler 方法响应释放动作(drop action)并且处理这个移动的初始器(在这个 //例子里是Box 组件)的位置,其位置根据鼠标释放时指针的位置确定。 private function dragEnterHandler(evt:DragEvent):void { if (evt.dragSource.hasFormat(FORMAT)) { DragManager.acceptDragDrop(Canvas(evt.currentTarget)); } } private function dropHandler(evt:DragEvent):void { var box:Box=Box(evt.dragInitiator); box.x=evt.localX - xoffset; box.y=evt.localY - yoffset; } ]]--> </mx:Script> <mx:Canvas id="canvas" backgroundColor="0xEEEEEE" width="300" height="300" dragEnter="dragEnterHandler(event);" dragDrop="dropHandler(event);"> <mx:Box id="dragItem" width="20" height="20" backgroundColor="0x00FFCC" mouseDown="mouseDownHandler(event);"/> </mx:Canvas> </mx:Application>