This is a little complicated to explain, so please bear with me. Run the example AIR app below, drag the button to see what happens, and then read on.
I can't seem to calculate the place where the item was actually dropped in the Canvas? I tried calculate the position in the dragDropHandler based on the canvas mouseY + verticalScrollPosition, but the mouseY position value oddly gets fixed to the mouse position where the drag started, not the current mouseY position. Is this a bug? <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApp();"> <mx:Script> <![CDATA[ import mx.controls.Button; import mx.events.DragEvent; import mx.core.DragSource; import mx.managers.DragManager; private function initApp():void{ maximize(); var myButton:Button = new Button; myButton.y = 1355; myButton.x = 60; myButton.label = "Drag Me"; myButton.addEventListener (MouseEvent.MOUSE_MOVE, mouseMoveHandler,false,0,true); myDropCanvas.addChild(myButton); myDropCanvas.verticalScrollPosition = 1255; } private function mouseMoveHandler (event:MouseEvent):void { if (event.currentTarget is Button){ var myProxy:Button = event.currentTarget as Button var dragInitiator:Button=Button(event.currentTarget); var ds:DragSource = new DragSource(); ds.addData (dragInitiator,"dragAppt"); DragManager.doDrag (dragInitiator, ds, event, myProxy, 0, 0,1.0,true); txtDragMouseY.text = myDropCanvas.mouseY.toString(); } trace ("Mouse Move Trace: " + myDropCanvas.mouseY); } private function dragEnterHandler (event:DragEvent):void{ if (event.dragSource.hasFormat("dragAppt")) { DragManager.acceptDragDrop(Canvas (event.currentTarget)); } } private function dragDropHandler (event:DragEvent):void{ Button(event.dragInitiator).y = Canvas (event.currentTarget).mouseY; trace ("Drag Drop Trace: " + myDropCanvas.mouseY); } ]]> </mx:Script> <mx:Canvas id="myDropCanvas" top="5" bottom="0" width="100%" verticalScrollPolicy="on" dragEnter="dragEnterHandler(event);" dragDrop="dragDropHandler(event);" click="trace (stage.mouseY);" left="180"> <mx:VRule left="53" top="16" width="5" height="2875" styleName="gridVerticalLines"/> </mx:Canvas> <mx:Label x="0" y="10" text="Canvas Mouse Y During Drag" fontWeight="bold"/> <mx:Text left="10" top="36" id="txtDragMouseY"/> </mx:WindowedApplication>