HTML 中的拖放Adobe AIR 1.0 和更高版本 若要将数据拖入和拖出基于 HTML 的应用程序(或者拖入和拖出 HTMLLoader 中显示的 HTML),则可以使用 HTML 拖放事件。使用 HTML 拖放 API,可以拖到和拖出 HTML 内容中的 DOM 元素。 注: 还可以通过侦听包含 HTML 内容的 HTMLLoader 对象上发生的事件,来使用 AIR NativeDragEvent 和 NativeDragManager API。但是,HTML API 更好地与 HTML DOM 集成到了一起,因而您可以控制默认行为。
默认的拖放行为HTML 环境为涉及文本、图像和 URL 的拖放动作提供了默认行为。利用默认行为,始终都可以将这些类型的数据拖出元素。但是,只能将文本拖入元素,并且只能拖到页面的可编辑区域内的元素。在页面的可编辑区域之间或可编辑区域内部拖动文本时,默认行为会执行移动动作。从不可编辑的区域或应用程序外部向可编辑区域拖动文本时,默认行为则会执行复制动作。 可以通过自行处理拖放事件来覆盖默认行为。若要取消默认行为,必须调用为拖放事件调度的对象的 preventDefault() 方法。这样,您就可以根据需要将数据插入放置目标以及从拖动源中删除数据,以便执行所选的动作。 默认情况下,用户可以选择和拖动任何文本,并可以拖动图像和链接。可以使用 WebKit CSS 属性 -webkit-user-select 来控制任何 HTML 元素的选择方式。例如,如果将 -webkit-user-select 设置为 none,则元素内容是不可选择的,因而也无法拖动。还可以使用 -webkit-user-drag CSS 属性控制元素作为一个整体是否可以拖动。不过,元素的内容则单独处理。用户仍可以拖动文本的选定部分。有关详细信息,请参阅 AIR 中的 CSS。 HTML 中的拖放事件从中发起拖动操作的启动器元素调度的事件有:
由拖动目标调度的事件有:
为响应这些事件而调度的事件对象与鼠标事件类似。可以使用诸如 (clientX, clientY) 和 (screenX, screenY) 等鼠标事件属性来确定鼠标位置。 拖动事件对象最重要的属性是 dataTransfer,此属性包含被拖动的数据。dataTransfer 对象本身具有以下属性和方法:
用于 HTML 拖放的 MIME 类型与 HTML 拖放事件的 dataTransfer 对象一起使用的 MIME 类型包括:
还可以使用其他 MIME 字符串,包括应用程序定义的字符串。但是,其他应用程序可能无法识别或使用所传输的数据。以所需格式向 dataTransfer 对象添加数据的工作由您负责完成。 重要说明: 只有在应用程序沙箱中运行的代码才能访问放置的文件。如果试图在非应用程序沙箱内读取或设置 File 对象的任何属性,则会产生安全错误。有关详细信息,请参阅在非应用程序 HTML 沙箱中处理文件放置。
HTML 中的拖动效果拖动动作的启动器可以通过在 dragstart 事件的处理函数中设置 dataTransfer.effectAllowed 属性,来限制允许的拖动效果。可以使用以下字符串值:
拖动动作的目标可以设置 dataTransfer.dropEffect 属性,以指示在用户完成放置后采取的动作。如果放置效果是允许的动作之一,则系统将显示相应的复制、移动或链接光标。如果不是,则系统将显示不可用 光标。如果目标未设置放置效果,则用户可以使用功能键从允许的动作中进行选择。 同时在 dragover 和 dragenter 事件的处理函数中设置 dropEffect 值: function doDragStart(event) { event.dataTransfer.setData("text/plain","Text to drag"); event.dataTransfer.effectAllowed = "copyMove"; } function doDragOver(event) { event.dataTransfer.dropEffect = "copy"; } function doDragEnter(event) { event.dataTransfer.dropEffect = "copy"; } 注: 尽管您始终都应在 dragenter 的处理函数中设置 dropEffect 属性,但要注意,下一个 dragover 事件会将此属性重置为其默认值。设置 dropEffect 以响应这两个事件。
|
|