写真が示すように、item1 の List1 を item iv の List2 にドラッグすると仮定すると、アイテム iv がドラッグオーバー状態を検出し、それ自体をハイライトするようにしたいので、どのように実装しますか?
質問する
416 次
2 に答える
1
各リスト要素にリスナーをアタッチして、MouseEvent.MOUSE_OVER
何かをドラッグしているかどうかを確認し、ドラッグしている場合event.target
は強調表示します。
于 2013-03-29T12:08:13.433 に答える
0
これが私の解決策とコードです: List2の場合:
<s:List
itemRenderer="components.MyRenderer"
dragEnter="myDragEnterHandler(event)"
dragOver="myDragOverHandler(event)"
dragExit="myDragExitHandler(event)">
<fx:Script>
<![CDATA[
private function myDragEnterHandler(event:DragEvent):void {
//we shoudld make List2 be drop target
DragManager.acceptDragDrop(e.currentTarget as IUIComponent);
}
private function myDragOverHandler(event:DragEvent):void {
var dropIndex:int = calDropIndex(event);
var element:MyRenderer= calDropItem(dropIndex);
//undo highlight if there is last over item
if(lastOverItem) {
lastOverItem.undoHighlight();
}
//remember the last highlight one and highlight it
lastOverItem = element;
element.highlight();
}
private function myDragExitHandler(event:DragEvent):void {
var dropIndex:int = calDropIndex(event);
var element:MyRenderer= calDropItem(dropIndex);
element.undoHighlight();
}
private function calDropIndex(event:DragEvent):int {
var dropLocation:DropLocation =
event.currentTarget.layout.calculateDropLocation(event);
var dropIndex:int = dropLocation.dropIndex;
return dropIndex;
}
private function calDropItem(dropIndex:int):MyRenderer{
var element:IVisualElement;
if (layout.useVirtualLayout) {
element = layout.target.getVirtualElementAt(dropIndex);
} else {
element = layout.target.getElementAt(dropIndex);
}
return element as MyRenderer;
}
]]>
</fx:Script>
</S:List>
于 2013-04-02T01:32:17.010 に答える