包 | flash.desktop |
类 | public class NativeDragManager |
继承 | NativeDragManager Object |
运行时版本: | AIR 1.0 |
可以传输以下几种数据:
注意:所有 NativeDragManager 成员都是静态的。不需要创建此类的实例。
拖放操作是一种用户界面动作,从用户单击某一可见项并将其拖动到别处开始。在执行拖动动作期间,当动作越过 AIR 应用程序窗口时,显示列表上的交互式对象将调度本机拖动事件。这些事件的处理函数可以调用 NativeDragManager 类的方法,以指示是否可以在对象上放置拖动项。作为响应,NativeDragManager 会更改鼠标指针以向用户提供反馈。
拖动动作
拖放动作通常用于三种类型的操作,这些操作称为动作。由于这些动作的含义取决于应用程序的上下文,因此,运行时不会针对动作强制执行任何特定行为。不过,适当地实现这些动作会改善用户使用应用程序时的体验。
可能的动作包括:
通过在开始拖动操作的 NativeDragManager.doDrag()
调用中提供 allowedActions
参数,可以为拖动动作设置允许的动作。如果未提供 allowedActions
参数,则允许所有动作。潜在的拖动目标可以使用 NativeDragEvent 对象的 allowedActions
属性来检查哪些动作是允许的,并且不应接受仅允许不兼容动作的拖动(但运行时并不强制执行这一点)。
如果拖动目标只实现一个动作,则此对象可以设置 nativeDragEnter
和 nativeDragOver
事件处理函数中的 NativeDragManager 的 dropAction
属性。拖动之前设置该属性将允许拖动管理器更新鼠标指针,以指示支持的动作并防止用户使用功能键选择不兼容的动作。如果指定的动作不是允许的动作之一,则不允许拖动,即使目标调用 acceptDrop()
方法。
在接受拖动时,潜在的拖动目标应通过设置 NativeDragManager.dropAction
属性以响应 nativeDragDrop
事件来指定所选的动作。此动作将被报告回 nativeDragComplete
事件中的启动显示对象。如果拖动目标未设置动作,则会从允许的动作中选择一个默认动作,这些动作的优先顺序为:复制、移动、链接。启动对象负责更新其内部状态以响应所选的动作。
用作动作名称的字符串常量在 NativeDragActions 类中定义。
事件序列
拖动动作从调用 mouseDown
或 mouseMove
事件处理函数内的 NativeDragManager.doDrag()
方法开始,然后继续执行以下事件序列以响应用户动作:
nativeDragStart
事件 -- 在调用 NativeDragManager.doDrag()
时,作为参数传递给该方法的交互式对象将成为启动器对象,并调度 nativeDragStart
事件。
nativeDragUpdate
事件 -- 在执行拖动时,启动器对象将继续调度 nativeDragUpdate
事件。
nativeDragEnter
、nativeDragOver
事件 - 当拖动动作越过交互式对象时,该对象将调度 nativeDragEnter
事件。当拖动动作停留在交互式对象上时,该对象将继续调度 nativeDragOver
事件。在响应这些事件中的任一事件时,作为潜在放置目标的对象应检查事件对象的属性,以确定它是否可以接受放置。如果数据格式和允许的动作适当,则这些事件的事件处理函数必须调用 NativeDragManager.acceptDrop()
,传入对将作为拖动目标的显示对象(通常是调度 nativeDragEnter
或 nativeDragOver
事件的对象)的引用。然后用户可以将拖动项拖动到目标上。
nativeDragExit
事件 -- 当拖动动作移出交互式对象时,该对象将调度 nativeDragExit
事件。如果先前对 NativeDragManager.acceptDrop()
方法的调用已经将该对象指定为拖动目标,该调用将不再有效,如果动作再次进入交互式对象,则必须再次调用 acceptDrop()
。
nativeDragDrop
事件 -- 当用户在目标显示对象上松开鼠标按键时,该对象将调度 nativeDragDrop
事件。此事件的处理函数可以访问该事件对象的 transferable
属性中的数据,并应设置 NativeDragManager.dropAction
属性以指示启动器对象应采取哪种动作。
nativeDragComplete
-- 当用户在拖动动作结束并释放鼠标时,启动器对象将调度 nativeDragComplete
事件(无论放置本身是否已完成)。此事件的处理函数可以检查事件对象的 dropAction
属性以确定应该对其内部数据状态进行何种修改(如果有),比如从列表中删除已拖动出去的项目。如果 dropAction
为 NativeDragActions.NONE
,则拖动项目没有放到符合条件的目标上。
应用程序之间的动作
当拖动动作从非 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()
方法会生成安全错误。
另请参见
属性 | 定义方 | ||
---|---|---|---|
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
dragInitiator : InteractiveObject [静态] [只读 (read-only)] 传递给启动拖动操作的 NativeDragManager.doDrag() 调用的交互式对象。 | NativeDragManager | ||
dropAction : String [静态] 放置目标指定的拖动操作。 | NativeDragManager | ||
isDragging : Boolean [静态] [只读 (read-only)] 报告拖动操作当前是否正在进行中。 | NativeDragManager | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object |
方法 | 定义方 | ||
---|---|---|---|
[静态] 通知 NativeDragManager 对象:指定的目标交互式对象可以接受与当前拖动事件对应的放置。 | NativeDragManager | ||
doDrag(dragInitiator:InteractiveObject, clipboard:Clipboard, dragImage:BitmapData = null, offset:Point = null, allowedActions:NativeDragOptions = null):void [静态] 启动拖放操作。 | NativeDragManager | ||
指示对象是否已经定义了指定的属性。 | Object | ||
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
指示指定的属性是否存在、是否可枚举。 | Object | ||
设置循环操作动态属性的可用性。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object |
dragInitiator | 属性 |
dragInitiator:InteractiveObject
[只读 (read-only)] 运行时版本: | AIR 1.0 |
传递给启动拖动操作的 NativeDragManager.doDrag()
调用的交互式对象。
public static function get dragInitiator():InteractiveObject
dropAction | 属性 |
dropAction:String
[读写] 运行时版本: | AIR 1.0 |
放置目标指定的拖动操作。
dropAction
属性应该在 nativeDragDrop
事件的处理函数中设置。如果在 nativeDragComplete
之前未设置 dropAction
,则 NativeDragManager 将用列表中允许的第一个动作设置此值:复制、移动或链接(按此顺序)。
public static function get dropAction():String
public function set dropAction(value:String):void
另请参见
isDragging | 属性 |
isDragging:Boolean
[只读 (read-only)] 运行时版本: | AIR 1.0 |
报告拖动操作当前是否正在进行中。
public static function get isDragging():Boolean
acceptDragDrop | () | 方法 |
public static function acceptDragDrop(target:InteractiveObject):void
运行时版本: | AIR 1.0 |
通知 NativeDragManager 对象:指定的目标交互式对象可以接受与当前拖动事件对应的放置。
只有在指定目标对象上具有可处理拖动项中至少一种数据格式和至少一种允许动作的 nativeDragDrop
处理函数时,才应该调用此方法。
只能在 nativeDragEnter
或 nativeDragOver
事件处理函数内调用此函数。
参数
target:InteractiveObject |
doDrag | () | 方法 |
public static function doDrag(dragInitiator:InteractiveObject, clipboard:Clipboard, dragImage:BitmapData = null, offset:Point = null, allowedActions:NativeDragOptions = null):void
运行时版本: | AIR 1.0 |
启动拖放操作。
启动拖动操作:
allowedActions
参数保留为 null
,则允许所有动作。)
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 ,则允许所有动作。
|
另请参见