Это старый вопрос, но я уверен, что другие ищут эту информацию. После долгих отладок я определил способ сделать эту работу (Flex 4 ... 3 может быть похожим).
Проблема в том, что пользователь может захватить оригинальный объект в любом месте, чтобы начать перетаскивание. Когда вы бросаете объект, вам нужно указать, куда он идет. Чтобы сделать это идеально, вам нужно знать, где пользователь схватил объект. Мне не удалось найти какую-либо ссылку на координаты «объект-мышь» x, y в DragEvent, переданные в обработчик события Drop. Однако эта информация предоставляется в оригинальном MouseEvent (localX, localY), переданном в обработчик Mouse Down. Все, что вам нужно сделать, это сохранить эти координаты (я сохранил их в перетаскиваемом объекте как переменные смещения мыши). Когда происходит событие удаления, просто вычтите их соответственно из DragEvents currentTarget mouseX и mouseY. По какой-то причине мне также нужно было вычесть 1 из обеих координат, чтобы получить идеальное падение.
Вот фрагмент кода, который, надо надеяться, сделает его более понятным.
// draggable object mouse down handler
private function mouseDownHandler(e:MouseEvent):void {
// MenuObject is one of my custom objects
var tempMenuObject:MenuObject = e.currentTarget as MenuObject;
// The MenuObject contains its own custom drag proxy
var tempProxy:Graphic = tempMenuObject.dragProxy;
// HERE !!! --- persist the "mouse to object" coords
tempMenuObject.mouseOffsetX = e.localX;
tempMenuObject.mouseOffsetY = e.localY;
DragManager.doDrag(e.currentTarget as IUIComponent, null, e, tempProxy);
}
// droppable containers drop handler
private function dragDropHandler(e:DragEvent):void {
// HERE !!! --- set the dragged objects x y coords (needed to subtract ONE from both coords to get it perfect)
e.dragInitiator.x = (e.currentTarget.mouseX - MenuObject(e.dragInitiator).mouseOffsetX) - 1;
e.dragInitiator.y = (e.currentTarget.mouseY - MenuObject(e.dragInitiator).mouseOffsetY) - 1;
// add the item to the container
e.currentTarget.addElement(e.dragInitiator);
}
Надеюсь, это спасет кого-то еще ...