【问题标题】:sortable grid like jquery ui in adobe flexadobe flex中的可排序网格,如jquery ui
【发布时间】:2014-12-31 00:12:59
【问题描述】:

我需要像 Adob​​e Flex 中的 jQuery UI's Sortable 这样的东西。有没有快速的解决方案?

【问题讨论】:

    标签: actionscript-3 flash apache-flex flex4 flash-builder


    【解决方案1】:

    这是 flex 中类似的可排序网格(3X3)示例:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                verticalAlign="middle"  horizontalAlign="center"
                height="100%" width="100%">
    <mx:Script>
        <![CDATA[
        import mx.containers.GridItem;
        import mx.controls.Button;
        import mx.core.DragSource;
        import mx.events.*;
        import mx.managers.DragManager;
        private var sourceRow:int;
        private var sourceCol:int;
        private var destinationRow:int;
        private var destinationCol:int;
        private var sourceIndex:int;
        private var destinationIndex:int;
    
        private function dragInit(event:MouseEvent):void
        {
            if(event.buttonDown && !DragManager.isDragging)
            {
                var button:Button = event.currentTarget as Button;
                var dragSource:DragSource = new DragSource();
                dragSource.addData(button, 'button');
                DragManager.doDrag(button, dragSource, event);
                sourceRow = (event.currentTarget.parent.parent.parent as Grid).getChildIndex(event.currentTarget.parent.parent);
                sourceCol = (event.currentTarget.parent.parent as GridRow).getChildIndex(event.currentTarget.parent);
                sourceIndex = sourceRow * 3 + sourceCol;
            }
        }
    
        private function dragEnter(event:DragEvent): void
        {
            var target:GridItem = event.currentTarget as GridItem;
            if (event.dragSource.hasFormat('button') )
            {
                DragManager.acceptDragDrop(target);
                DragManager.showFeedback(DragManager.MOVE);
                trace("Drag Enter....");
                destinationRow = (target.parent.parent as Grid).getChildIndex(target.parent);
                destinationCol = (target.parent as GridRow).getChildIndex(target);
                destinationIndex = destinationRow * 3 + destinationCol;
            }
            if(destinationIndex > sourceIndex)
            {
                var targetGridItem:GridItem = new GridItem();
                for(var i = sourceIndex; i< destinationIndex; i++)
                {
                    targetGridItem = getGridItemByIndex(i);
                    targetGridItem.addChildAt(getGridItemByIndex(i+1).getChildAt(0),0);
                }
            }
            else if(destinationIndex < sourceIndex)
            {
                var targetGridItem:GridItem = new GridItem();
                for(var i = sourceIndex; i > destinationIndex; i--)
                {
                    targetGridItem = getGridItemByIndex(i);
                    targetGridItem.addChildAt(getGridItemByIndex(i-1).getChildAt(0),0);
                }
            }
            sourceIndex = destinationIndex;
        }
        private function getGridItemByIndex(i:int):GridItem
        {
            var row:int = i/3;
            var col:int = i%3;
            return (grid.getChildAt(row) as GridRow).getChildAt(col) as GridItem;
        }
    
        private function dragDrop(event:DragEvent): void
        {
            var target:GridItem = event.currentTarget as GridItem;
            var button:Button = event.dragSource.dataForFormat('button') as Button;
            target.addChild(button);
        }
        ]]>
    </mx:Script>
    
    <mx:Grid id="grid" >
        <mx:GridRow width="100%" height="100%">
            <mx:GridItem width="88" height="88" dragEnter="dragEnter(event)" dragDrop="dragDrop(event)"
                         backgroundColor="black"  verticalAlign="middle" paddingLeft="4"
                         verticalScrollPolicy="off" horizontalScrollPolicy="off">
                <mx:Button label="A" width="80" height="80" mouseMove="dragInit(event)"/>
            </mx:GridItem>
            <mx:GridItem width="88" height="88" dragEnter="dragEnter(event)" dragDrop="dragDrop(event)"
                          verticalScrollPolicy="off" horizontalScrollPolicy="off"
                         backgroundColor="red"  paddingLeft="4" verticalAlign="middle">
                <mx:Button label="B" width="80" height="80" mouseMove="dragInit(event)" />
            </mx:GridItem>
            <mx:GridItem width="88" height="88" dragEnter="dragEnter(event)" dragDrop="dragDrop(event)"
                         verticalScrollPolicy="off" horizontalScrollPolicy="off"
                         backgroundColor="yellow"  paddingLeft="4" verticalAlign="middle">
                <mx:Button label="C" width="80" height="80" mouseMove="dragInit(event)"/>
            </mx:GridItem>
        </mx:GridRow>
        <mx:GridRow width="100%" height="100%">
            <mx:GridItem width="88" height="88" dragEnter="dragEnter(event)" dragDrop="dragDrop(event)"
                         horizontalScrollPolicy="off" verticalScrollPolicy="off"
                         backgroundColor="blue"  paddingLeft="4" verticalAlign="middle">
                <mx:Button label="D" width="80" height="80" mouseMove="dragInit(event)"/>
            </mx:GridItem>
            <mx:GridItem width="88" height="88" dragEnter="dragEnter(event)" dragDrop="dragDrop(event)"
                         horizontalScrollPolicy="off" verticalScrollPolicy="off"
                         backgroundColor="0xee82ee"  paddingLeft="4" verticalAlign="middle">
                <mx:Button label="E" width="80" height="80" mouseMove="dragInit(event)"/>
            </mx:GridItem>
            <mx:GridItem width="88" height="88" dragEnter="dragEnter(event)" dragDrop="dragDrop(event)"
                         horizontalScrollPolicy="off" verticalScrollPolicy="off"
                         backgroundColor="purple"  paddingLeft="4" verticalAlign="middle">
                <mx:Button label="F" width="80" height="80" mouseMove="dragInit(event)"/>
            </mx:GridItem>
        </mx:GridRow>
        <mx:GridRow width="100%" height="100%">
            <mx:GridItem width="88" height="88" dragEnter="dragEnter(event)" dragDrop="dragDrop(event)"
                         horizontalScrollPolicy="off" verticalScrollPolicy="off"
                         backgroundColor="green"  paddingLeft="4" verticalAlign="middle">
                <mx:Button label="G" width="80" height="80" mouseMove="dragInit(event)"/>
            </mx:GridItem>
            <mx:GridItem width="88" height="88" dragEnter="dragEnter(event)" dragDrop="dragDrop(event)"
                         horizontalScrollPolicy="off" verticalScrollPolicy="off"
                         backgroundColor="0x87ceeb"  paddingLeft="4" verticalAlign="middle">
                <mx:Button label="H" width="80" height="80" mouseMove="dragInit(event)"/>
            </mx:GridItem>
            <mx:GridItem width="88" height="88" dragEnter="dragEnter(event)" dragDrop="dragDrop(event)"
                         horizontalScrollPolicy="off" verticalScrollPolicy="off"
                         backgroundColor="navy"  paddingLeft="4" verticalAlign="middle">
                <mx:Button label="I" width="80" height="80" mouseMove="dragInit(event)"/>
            </mx:GridItem>
        </mx:GridRow>
    </mx:Grid>
    </mx:Application>
    

    【讨论】:

      猜你喜欢
      • 2016-07-25
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      相关资源
      最近更新 更多