讨厌的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中的DragManager类,它是实现拖放操作的核心。DragManager提供了开始拖放、监听拖放事件以及处理拖放结果的方法。当用户开始拖动一个对象时,我们可以通过调用DragManager的beginDrag()方法...
2. **DragManager的使用**:在鼠标按下时,我们调用DragManager的startDrag()方法,传入当前被点击的组件作为参数。这样,当鼠标移动时,组件会跟随鼠标移动,形成拖动效果。 3. **限制拖动范围**:我们可以指定...
例如,`DragManager.enableDrag()`可以开启拖放功能,而`DragManager.createDragProxy()`则用于创建拖动时的代理对象。 2. **开始拖放**: 开始拖放操作通常在某个事件触发时进行,如`mousedown`事件。首先,我们...
拖拽功能在Flex中可以通过使用内置的DragManager类和Event类来实现。DragManager类提供了全局的拖放管理,而事件类如MouseEvent和DragEvent则是处理拖放过程中的各种交互。下面我们将深入探讨如何在Flex中创建一个...
4. 拖放效果:通过设置`DragManager.acceptDrag()`和`DragManager.dropEffect`,可以控制拖放操作是否被接受,以及拖放时的视觉反馈,如“copy”、“move”等效果。 三、Flex Drag-and-Drop库的扩展和自定义 1. ...
在Flex中,实现拖放(Drag and Drop)功能主要涉及两个核心类:`DragManager`和`DragInitiator`。`DragManager`是系统级别的服务,负责管理整个应用的拖放操作,而`DragInitiator`通常是一个可拖动的UI组件,如...
本篇将深入探讨如何在Flex中实现线图的左右移动,以及DragManager类在其中的作用。 一、Flex中的LineChart组件 LineChart是Flex中用于绘制折线图的标准组件,它继承自Chart类,可以展示各种数值型数据。LineChart...
`DragManager`是系统级别的对象,负责管理整个应用程序的拖放行为,而`DropTarget`则定义了可接收拖放操作的目标区域。 1. **DragManager**: - 开始拖放操作:通常,通过在某个可拖动对象上触发鼠标按下事件,并...
- 同样,也可以通过设置DragManager.dragCursor和DragManager.dragImage来改变拖动时的光标和图像。 6. **资源**: - `www.pudn.com.txt` 可能包含了关于这个拖拽树控件的示例代码或更详细的解释,可能是一个教程...
实现类似游戏武侠风云中背包物品的拖动,基于as的库进行编写,没有使用DragManager,DragManager的特效太多,没有研究怎样去除。 本例中做到了两个面板中各自物品的拖动及互相拖动,比较实用。 以前总是基于...
DragManager负责处理整个拖放过程的逻辑,而DropTarget则定义了可以接受被拖动对象的目标区域。 首先,我们需要为树形控件设置DragSource,使其具备被拖动的能力。这通常涉及监听鼠标事件,如mousedown,然后创建一...
在实例中,可能通过调用DragManager.startDrag()开始一个拖放过程,并设置拖动范围、是否允许缩放或旋转等参数。 接着,我们要关注拖放源(DragSource)。拖放源是被拖动的组件或数据,可以是任何UIComponent或数据...
当这个事件被触发时,启动拖放过程,调用`DragManager.doDrag()`方法,传入要拖动的显示对象、拖动图像(可选,用于自定义拖动时的视觉效果)、以及数据对象(包含拖动信息,可以在放置目标中访问)。 ```...
拖放功能在 Flex 3 中主要由两个核心组件支持:`DragManager` 和 `DropTarget`。`DragManager` 是系统级别的服务,负责整个应用程序的拖放行为管理;而 `DropTarget` 是一个接口,需要被拖放的目标对象实现,以定义...
`DragManager` 是Flex中全局的拖放管理器,负责处理所有的拖放操作,而`DragSource` 则是定义拖放源的类,它定义了被拖动的数据以及与之相关的视觉效果。 首先,要实现拖放操作,你需要设置一个可拖动的组件。这...
Flex提供了一系列的DragManager类和DragEvent类来处理这些操作。 1. **启动源(DragSource)**: 在Flex中,我们可以为任何UIComponent创建一个DragSource,定义拖动时的数据。例如,如果要拖动一个列表项,我们...
在Flex中实现拖放功能主要涉及到两个主要类:`DragManager`和`DragInitiator`。 1. **DragManager**:这是Flex中的全局单例类,负责管理整个应用程序的拖放行为。你可以调用其静态方法来启动、结束拖放操作,或者...
addEvent(document, 'mousedown', dragManager.mousedown); addEvent(document, 'mousemove', dragManager.mousemove); addEvent(document, 'mouseup', dragManager.mouseup); ``` 请注意,上述代码只是一个基础...
1. **DragManager**: Flex 中的 DragManager 是处理拖放事件的主要对象,它负责监控和管理整个拖放过程。开发者需要通过 DragManager 来启动拖动操作,并设置拖动源和目标的相关属性。 2. **dragEnabled 和 ...