(仅限 AIR)
包flash.desktop
类public class NativeDragManager
继承NativeDragManager Inheritance Object

运行时版本: AIR 1.0

NativeDragManager 类协调拖放操作。使用本机拖放 API 可以使用户在 AIR 应用程序和本机操作系统之间、两个应用程序之间以及一个应用程序内不同组件之间拖动数据。

可以传输以下几种数据:

注意:所有 NativeDragManager 成员都是静态的。不需要创建此类的实例。

拖放操作是一种用户界面动作,从用户单击某一可见项并将其拖动到别处开始。在执行拖动动作期间,当动作越过 AIR 应用程序窗口时,显示列表上的交互式对象将调度本机拖动事件。这些事件的处理函数可以调用 NativeDragManager 类的方法,以指示是否可以在对象上放置拖动项。作为响应,NativeDragManager 会更改鼠标指针以向用户提供反馈。

拖动动作

拖放动作通常用于三种类型的操作,这些操作称为动作。由于这些动作的含义取决于应用程序的上下文,因此,运行时不会针对动作强制执行任何特定行为。不过,适当地实现这些动作会改善用户使用应用程序时的体验。

可能的动作包括:

通过在开始拖动操作的 NativeDragManager.doDrag() 调用中提供 allowedActions 参数,可以为拖动动作设置允许的动作。如果未提供 allowedActions 参数,则允许所有动作。潜在的拖动目标可以使用 NativeDragEvent 对象的 allowedActions 属性来检查哪些动作是允许的,并且不应接受仅允许不兼容动作的拖动(但运行时并不强制执行这一点)。

如果拖动目标只实现一个动作,则此对象可以设置 nativeDragEnter 和 nativeDragOver 事件处理函数中的 NativeDragManager 的 dropAction 属性。拖动之前设置该属性将允许拖动管理器更新鼠标指针,以指示支持的动作并防止用户使用功能键选择不兼容的动作。如果指定的动作不是允许的动作之一,则不允许拖动,即使目标调用 acceptDrop() 方法。

在接受拖动时,潜在的拖动目标应通过设置 NativeDragManager.dropAction 属性以响应 nativeDragDrop 事件来指定所选的动作。此动作将被报告回 nativeDragComplete 事件中的启动显示对象。如果拖动目标未设置动作,则会从允许的动作中选择一个默认动作,这些动作的优先顺序为:复制、移动、链接。启动对象负责更新其内部状态以响应所选的动作。

用作动作名称的字符串常量在 NativeDragActions 类中定义。

事件序列

拖动动作从调用 mouseDown 或 mouseMove 事件处理函数内的 NativeDragManager.doDrag() 方法开始,然后继续执行以下事件序列以响应用户动作:

应用程序之间的动作

当拖动动作从非 AIR 应用程序进入 AIR 应用程序窗口时,不会有启动器对象调度 nativeDragStart 或 nativeDragComplete 事件。在该动作期间调度的事件将遵循与在同一 AIR 应用程序内开始和结束的动作相同的模式。

当拖动动作离开 AIR 应用程序窗口时,不会有目标对象调度 nativeDragEnter、nativeDragOver 或 nativeDragDrop 事件。启动器对象仍将调度 nativeDragComplete 事件,该事件会报告由本机操作系统设置的拖动动作(如果不接受放置,则报告 none)。

如果拖动动作从一个 AIR 应用程序移动到另一个 AIR 应用程序,启动器和目标显示对象将照常在其各自的应用程序内调度事件。

传输信息

在拖放动作期间传输的数据包含在 Clipboard 对象中。此数据对象是使用启动拖动动作的 NativeDragManager.doDrag() 方法添加到拖动操作中的。潜在的放置目标可以通过本机拖动事件对象的 clipboard 属性访问 Clipboard 对象。一旦拖动操作开始后,只能在 NativeDragEvent 的事件处理函数中访问 Clipboard 对象。对该对象的任何其他访问尝试都将生成运行时错误。

安全注意事项

启动器和潜在目标对象的安全沙箱确定可以何种方式访问所拖动的数据。如果两个对象在同一个沙箱中,则可以从任一 NativeDragEvent 对象访问数据。不过,如果启动器和目标对象在不同的沙箱中,则只能在 nativeDragDrop 事件的事件处理函数内的目标沙箱中访问数据。其他本机拖动事件处理函数仍然可以访问事件的 clipboard 属性中所引用的 Clipboard 对象,以确定可以使用哪些数据格式,但调用 clipboard.getData() 方法会生成安全错误。

另请参见

flash.events.NativeDragEvent
flash.desktop.NativeDragActions
flash.desktop.NativeDragOptions
flash.desktop.Clipboard


公共属性
 属性定义方
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  AIR-only dragInitiator : InteractiveObject
[静态] [只读 (read-only)] 传递给启动拖动操作的 NativeDragManager.doDrag() 调用的交互式对象。
NativeDragManager
  AIR-only dropAction : String
[静态] 放置目标指定的拖动操作。
NativeDragManager
  AIR-only isDragging : Boolean
[静态] [只读 (read-only)] 报告拖动操作当前是否正在进行中。
NativeDragManager
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
公共方法
 方法定义方
  
[静态] 通知 NativeDragManager 对象:指定的目标交互式对象可以接受与当前拖动事件对应的放置。
NativeDragManager
  
AIR-only doDrag(dragInitiator:InteractiveObject, clipboard:Clipboard, dragImage:BitmapData = null, offset:Point = null, allowedActions:NativeDragOptions = null):void
[静态] 启动拖放操作。
NativeDragManager
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
设置循环操作动态属性的可用性。
Object
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
属性详细信息
AIR-only dragInitiator属性
dragInitiator:InteractiveObject  [只读 (read-only)]

运行时版本: AIR 1.0

传递给启动拖动操作的 NativeDragManager.doDrag() 调用的交互式对象。



实现
    public static function get dragInitiator():InteractiveObject
AIR-only dropAction属性 
dropAction:String  [读写]

运行时版本: AIR 1.0

放置目标指定的拖动操作。

dropAction 属性应该在 nativeDragDrop 事件的处理函数中设置。如果在 nativeDragComplete 之前未设置 dropAction,则 NativeDragManager 将用列表中允许的第一个动作设置此值:复制、移动或链接(按此顺序)。



实现
    public static function get dropAction():String
    public function set dropAction(value:String):void

另请参见

AIR-only isDragging属性 
isDragging:Boolean  [只读 (read-only)]

运行时版本: AIR 1.0

报告拖动操作当前是否正在进行中。



实现
    public static function get isDragging():Boolean
方法详细信息
AIR-only acceptDragDrop()方法
public static function acceptDragDrop(target:InteractiveObject):void

运行时版本: AIR 1.0

通知 NativeDragManager 对象:指定的目标交互式对象可以接受与当前拖动事件对应的放置。

只有在指定目标对象上具有可处理拖动项中至少一种数据格式和至少一种允许动作的 nativeDragDrop 处理函数时,才应该调用此方法。

只能在 nativeDragEnter 或 nativeDragOver 事件处理函数内调用此函数。

参数

target:InteractiveObject

AIR-only doDrag()方法 
public static function doDrag(dragInitiator:InteractiveObject, clipboard:Clipboard, dragImage:BitmapData = null, offset:Point = null, allowedActions:NativeDragOptions = null):void

运行时版本: AIR 1.0

启动拖放操作。

启动拖动操作:

  1. 创建一个新的 Clipboard 对象。
  2. 以一种或多种格式添加要传输的数据。
  3. 或者,创建一个 BitmapData 对象作为拖动期间的代理图像。
  4. 或者,创建一个 NativeDragOptions 对象以限制此操作中允许的动作。(如果 allowedActions 参数保留为 null,则允许所有动作。)
  5. 调用 NativeDragManager.doDrag()。

启动器对象在调用此方法后将调度一个 nativeDragStart 事件,在拖动进行过程中将调度几个 nativeDragStart 事件,而当用户释放鼠标按钮以结束拖动动作时将调度一个 nativeDragComplete 事件。nativeDragComplete 事件的处理函数可以检查该事件的 dropAction 属性以确定拖放操作是否成功完成。如果 dropAction 为 NativeDragActions.NONE,则拖动项目没有放到符合条件的目标上。

只能从 mouseDown 或 mouseMove 事件处理函数内调用此方法。(如果在响应 mouseMove 事件时调用,鼠标按钮也必须处于按下状态。)

参数

dragInitiator:InteractiveObject — 通常是从中开始拖动动作的对象。接收 nativeDragStart 和 nativeDragComplete 事件。
 
clipboard:Clipboard — 所拖动数据的容器对象。
 
dragImage:BitmapData (default = null) — 在拖动动作期间在鼠标指针下显示的可选代理图像。如果为 null,则不显示任何图像。
 
offset:Point (default = null) — 鼠标热点和拖动图像左上角之间的偏移。负坐标会将图像相对于该热点向上和向左移动。如果为 null,拖动图像的左上角将位于鼠标热点。
 
allowedActions:NativeDragOptions (default = null) — 限制此操作允许的拖放动作。如果为 null,则允许所有动作。

另请参见