包 | flash.desktop |
类 | public class NativeDragManager |
继承 | NativeDragManager Object |
运行时版本: | AIR 1.0 |
可以传输以下几种数据:
- 位图
- 文件
- 文本
- URL 字符串
- 序列化对象
- 对象引用(仅在源应用程序内有效)
注意:所有 NativeDragManager 成员都是静态的。不需要创建此类的实例。
拖放操作是一种用户界面手势,从用户单击某一可见项并将其拖动到别处开始。在执行拖动手势期间,当手势越过 AIR 应用程序窗口时,显示列表上的交互式对象将调度本机拖动事件。这些事件的处理函数可以调用 NativeDragManager 类的方法,以表示是否可以在对象上放置拖动项。作为响应,NativeDragManager 会更改鼠标指针以向用户提供反馈。
AIR 配置文件支持:AIR for TV 设备不支持此功能。所有移动设备上也不支持它。您可以使用 NativeDragManager.isSupported
属性在运行时测试是否受支持。有关在多个配置文件之间支持 API 的详细信息,请参阅 AIR 配置文件支持。
拖动动作
拖放手势通常用于三种类型的操作,这些操作称为动作。由于这些动作的含义取决于应用程序的上下文,因此,运行时不会针对动作强制执行任何特定行为。不过,适当地实现这些动作会改善用户使用应用程序时的体验。
可能的动作包括:
- 复制 -- 制作数据的副本,保持原始数据不变。(当在应用程序内拖动对象时,应该注意复制原始对象本身,而不要复制对该对象的引用。)
- 移动 -- 将数据从其原始上下文中移动到由放置目标定义的上下文中,比如将一个项目从一个列表移动到另一个列表中。
- 链接 -- 创建对原始数据的引用或原始数据的快捷方式,将项目保留在其原始上下文中。
通过在开始拖动操作的 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()
方法会生成安全错误。
相关 API 元素
flash.desktop.NativeDragActions
flash.desktop.NativeDragOptions
flash.desktop.Clipboard
属性 | 由以下参数定义 | ||
---|---|---|---|
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
dragInitiator : InteractiveObject [静态] [只读]
传递给启动拖动操作的 NativeDragManager.doDrag() 调用的交互式对象。 | NativeDragManager | ||
dropAction : String [静态]
放置目标指定的拖动操作。 | NativeDragManager | ||
isDragging : Boolean [静态] [只读]
报告拖动操作当前是否正在进行中。 | NativeDragManager | ||
isSupported : Boolean [静态] [只读]
如果当前平台支持 NativeDragManager 类,则 isSupported 属性设置为 true,否则设置为 false。 | NativeDragManager |
方法 | 由以下参数定义 | ||
---|---|---|---|
[静态]
通知 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 | ||
返回指定对象的原始值。 | Object |
dragInitiator | 属性 |
dragInitiator:InteractiveObject
[只读] 运行时版本: | AIR 1.0 |
传递给启动拖动操作的 NativeDragManager.doDrag()
调用的交互式对象。
实现
public static function get dragInitiator():InteractiveObject
dropAction | 属性 |
isDragging | 属性 |
isSupported | 属性 |
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 |
启动拖放操作。
启动拖动操作:
- 创建一个新的 Clipboard 对象。
- 以一种或多种格式添加要传输的数据。
- 或者,创建一个 BitmapData 对象作为拖动期间的代理图像。
- 或者,创建一个 NativeDragOptions 对象以限制此操作中允许的动作。(如果
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 ,则允许所有动作。
|
相关 API 元素
Tue Jun 12 2018, 11:04 AM Z