`

讨厌的DragManager

    博客分类:
  • Flex
阅读更多

讨厌的DragManager

 

在一个容器上覆盖了层,透明png,然后容器里面就接受不到drag的任何事件了。翻看flex框架代码发现是在DragProxy里面做的判断,还是没有对drag忽略的代码。

 

没辙了,只好用MouseMove来做了:

 

<?xml version="1.0"?>
<!-- Simple example to demonstrate the ComboBox control. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" 
    applicationComplete="applicationCompleteHandler()">
    <mx:Canvas id="ppp" width="440" height="267"  backgroundColor="#FFFFFF"
        blendMode="{BlendMode.LAYER}">
      <mx:Image  source="Creek.jpg" 
        maintainAspectRatio="false"
         mouseEnabled="false" mouseChildren="false" width="100%" height="100%"/>
     <mx:Canvas id="c" width="80%" height="80%"
         horizontalCenter="0" verticalCenter="0" borderStyle="solid" borderThickness="20" 
         borderColor="#33003E" backgroundColor="#E8E8E8"/>
     <local:DragIgnoreImage
         mouseEnabled="false" mouseChildren="false" width="100%" height="100%"/>     
    </mx:Canvas>
    <mx:Image id="p" width="100" height="100" source="Desert Landscape.jpg" mouseDown="imageMouseDownHandler(event)"/>
        <mx:List dragEnabled="true"> 
        <mx:dataProvider>
            <mx:String>AK</mx:String>
            <mx:String>AL</mx:String>
            <mx:String>AR</mx:String>
        </mx:dataProvider>
    </mx:List>
    <mx:Script>
        <![CDATA[
            import mx.core.IFlexDisplayObject;
            import mx.core.DragSource;
            import mx.core.UIComponent;
            import mx.events.DragEvent;
            import mx.managers.DragManager;
            private function applicationCompleteHandler():void {
                stage.addEventListener(MouseEvent.MOUSE_DOWN,stageMousedownhandler);
            }
            
            private function stageMousedownhandler(e:MouseEvent):void {
                stage.addEventListener(MouseEvent.MOUSE_MOVE,stageMouseMovehandler);
                stage.addEventListener(MouseEvent.MOUSE_UP,stageMouseUpHandler);
            }
            
            private function stageMouseMovehandler(e:MouseEvent):void {
                var p:Point = new Point(e.stageX,e.stageY);
                p = c.globalToLocal(p);
                
                if(DragManager.isDragging) {
                    if(c.getBounds(c).containsPoint(p)) {
                        c.setStyle("backgroundColor",0xFFFFF000);
                    }
                    else {
                         c.setStyle("backgroundColor",0xFF00F000);
                    }
                }
            }
            
            private function stageMouseUpHandler(e:MouseEvent):void {
                stage.removeEventListener(MouseEvent.MOUSE_MOVE,stageMouseMovehandler);
                stage.removeEventListener(MouseEvent.MOUSE_UP,stageMouseUpHandler);
            }
            
            private function imageMouseDownHandler(e:MouseEvent):void {
                var dragInitiator:Image=p;
                var ds:DragSource = new DragSource();
                ds.addData(dragInitiator, "img");               
                
                var d:Image = new Image();
                d.width = d.height = 100;
                d.source = p.source;
                DragManager.doDrag(dragInitiator, ds, e,d);
            }
        ]]>
    </mx:Script>
</mx:Application>

 

 

 

分享到:
评论

相关推荐

    Flex4实现拖拽功能

    首先,我们需要了解Flex4中的DragManager类,它是实现拖放操作的核心。DragManager提供了开始拖放、监听拖放事件以及处理拖放结果的方法。当用户开始拖动一个对象时,我们可以通过调用DragManager的beginDrag()方法...

    flex拓扑示例(可以拖动)

    2. **DragManager的使用**:在鼠标按下时,我们调用DragManager的startDrag()方法,传入当前被点击的组件作为参数。这样,当鼠标移动时,组件会跟随鼠标移动,形成拖动效果。 3. **限制拖动范围**:我们可以指定...

    Flex关于拖拽编程

    例如,`DragManager.enableDrag()`可以开启拖放功能,而`DragManager.createDragProxy()`则用于创建拖动时的代理对象。 2. **开始拖放**: 开始拖放操作通常在某个事件触发时进行,如`mousedown`事件。首先,我们...

    flex实现的拖拽控件

    拖拽功能在Flex中可以通过使用内置的DragManager类和Event类来实现。DragManager类提供了全局的拖放管理,而事件类如MouseEvent和DragEvent则是处理拖放过程中的各种交互。下面我们将深入探讨如何在Flex中创建一个...

    Flex拖拽库flex拖拽库

    4. 拖放效果:通过设置`DragManager.acceptDrag()`和`DragManager.dropEffect`,可以控制拖放操作是否被接受,以及拖放时的视觉反馈,如“copy”、“move”等效果。 三、Flex Drag-and-Drop库的扩展和自定义 1. ...

    Flex拖拽控件效果

    在Flex中,实现拖放(Drag and Drop)功能主要涉及两个核心类:`DragManager`和`DragInitiator`。`DragManager`是系统级别的服务,负责管理整个应用的拖放操作,而`DragInitiator`通常是一个可拖动的UI组件,如...

    flex 移动折线图

    本篇将深入探讨如何在Flex中实现线图的左右移动,以及DragManager类在其中的作用。 一、Flex中的LineChart组件 LineChart是Flex中用于绘制折线图的标准组件,它继承自Chart类,可以展示各种数值型数据。LineChart...

    Flex拖动购物车很Cool给大家更多的帮助

    `DragManager`是系统级别的对象,负责管理整个应用程序的拖放行为,而`DropTarget`则定义了可接收拖放操作的目标区域。 1. **DragManager**: - 开始拖放操作:通常,通过在某个可拖动对象上触发鼠标按下事件,并...

    flex 拖拽树 控件

    - 同样,也可以通过设置DragManager.dragCursor和DragManager.dragImage来改变拖动时的光标和图像。 6. **资源**: - `www.pudn.com.txt` 可能包含了关于这个拖拽树控件的示例代码或更详细的解释,可能是一个教程...

    as拖动,简单,实用,类似游戏中背包物品拖动

    实现类似游戏武侠风云中背包物品的拖动,基于as的库进行编写,没有使用DragManager,DragManager的特效太多,没有研究怎样去除。 本例中做到了两个面板中各自物品的拖动及互相拖动,比较实用。 以前总是基于...

    flex拖动树形

    DragManager负责处理整个拖放过程的逻辑,而DropTarget则定义了可以接受被拖动对象的目标区域。 首先,我们需要为树形控件设置DragSource,使其具备被拖动的能力。这通常涉及监听鼠标事件,如mousedown,然后创建一...

    flex中拖拉拽好实例objecthandles

    在实例中,可能通过调用DragManager.startDrag()开始一个拖放过程,并设置拖动范围、是否允许缩放或旋转等参数。 接着,我们要关注拖放源(DragSource)。拖放源是被拖动的组件或数据,可以是任何UIComponent或数据...

    Flex 拖拽例子 从不同组件间拖拽

    当这个事件被触发时,启动拖放过程,调用`DragManager.doDrag()`方法,传入要拖动的显示对象、拖动图像(可选,用于自定义拖动时的视觉效果)、以及数据对象(包含拖动信息,可以在放置目标中访问)。 ```...

    Flex 3 拖放实现

    拖放功能在 Flex 3 中主要由两个核心组件支持:`DragManager` 和 `DropTarget`。`DragManager` 是系统级别的服务,负责整个应用程序的拖放行为管理;而 `DropTarget` 是一个接口,需要被拖放的目标对象实现,以定义...

    Flex3+组件拖放教程

    `DragManager` 是Flex中全局的拖放管理器,负责处理所有的拖放操作,而`DragSource` 则是定义拖放源的类,它定义了被拖动的数据以及与之相关的视觉效果。 首先,要实现拖放操作,你需要设置一个可拖动的组件。这...

    flex 拖拽的例子

    Flex提供了一系列的DragManager类和DragEvent类来处理这些操作。 1. **启动源(DragSource)**: 在Flex中,我们可以为任何UIComponent创建一个DragSource,定义拖动时的数据。例如,如果要拖动一个列表项,我们...

    Flex_DragDrop

    在Flex中实现拖放功能主要涉及到两个主要类:`DragManager`和`DragInitiator`。 1. **DragManager**:这是Flex中的全局单例类,负责管理整个应用程序的拖放行为。你可以调用其静态方法来启动、结束拖放操作,或者...

    javascript 拖动表格行实现代码.docx

    addEvent(document, 'mousedown', dragManager.mousedown); addEvent(document, 'mousemove', dragManager.mousemove); addEvent(document, 'mouseup', dragManager.mouseup); ``` 请注意,上述代码只是一个基础...

    flex tree 拖拽

    1. **DragManager**: Flex 中的 DragManager 是处理拖放事件的主要对象,它负责监控和管理整个拖放过程。开发者需要通过 DragManager 来启动拖动操作,并设置拖动源和目标的相关属性。 2. **dragEnabled 和 ...

Global site tag (gtag.js) - Google Analytics