diff --git a/zh-cn/application-dev/reference/arkui-ts/ts-universal-events-drag-drop.md b/zh-cn/application-dev/reference/arkui-ts/ts-universal-events-drag-drop.md index 7cede4af00df263cca23a3ff17ae654fe1c435b9..291aeb168e1a2a4d8b401084e78cf967b7cbe370 100644 --- a/zh-cn/application-dev/reference/arkui-ts/ts-universal-events-drag-drop.md +++ b/zh-cn/application-dev/reference/arkui-ts/ts-universal-events-drag-drop.md @@ -7,12 +7,13 @@ > 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 > > 已实现默认拖拽效果组件:[Image](../arkui-ts/ts-basic-components-image.md)、[Text](../arkui-ts/ts-basic-components-text.md)、[TextArea](../arkui-ts/ts-basic-components-textarea.md)、[Search](../arkui-ts/ts-basic-components-search.md)。 - +> +> 应用中的预置资源文件不支持拖拽(即应用在安装前的HAP包中已经存在的资源文件)。 ## 事件 | 名称 | 支持冒泡 | 功能描述 | | ------------------------------------------------------------ | -------- | ------------------------------------------------------------ | -| onDragStart(event: (event?: [DragEvent](#dragevent说明), extraParams?: string) =>  [CustomBuilder](ts-types.md#custombuilder8) \| [DragItemInfo](#dragiteminfo说明)) | 否 | 第一次拖拽此事件绑定的组件时,触发回调。
- event:拖拽事件信息,详见[DragEvent](#dragevent说明)。
- extraParams:拖拽事件额外信息,详见[extraParams](#extraparams说明)说明。
返回值:拖拽过程中显示的组件信息。
触发条件:长按时间 >= 500ms。
事件优先级:长安触发时间 < 500ms,长按事件 > 拖拽事件
其他: 拖拽事件 > 长按事件。 | +| onDragStart(event: (event?: [DragEvent](#dragevent说明), extraParams?: string) =>  [CustomBuilder](ts-types.md#custombuilder8) \| [DragItemInfo](#dragiteminfo说明)) | 否 | 第一次拖拽此事件绑定的组件时,触发回调。
- event:拖拽事件信息,详见[DragEvent](#dragevent说明)。
- extraParams:拖拽事件额外信息,详见[extraParams](#extraparams说明)说明。
返回值:拖拽过程中显示的组件信息。
触发条件:长按时间 >= 500ms。
事件优先级:长按触发时间 < 500ms,长按事件 > 拖拽事件
其他: 拖拽事件 > 长按事件。 | | onDragEnter(event: (event?: [DragEvent](#dragevent说明), extraParams?: string) => void) | 否 | 拖拽进入组件范围内时,触发回调。
- event:拖拽事件信息,包括拖拽点坐标。
- extraParams:拖拽事件额外信息,详见[extraParams](#extraparams说明)说明。
当监听了onDrop事件时,此事件才有效。 | | onDragMove(event: (event?: [DragEvent](#dragevent说明), extraParams?: string) => void) | 否 | 拖拽在组件范围内移动时,触发回调。
- event:拖拽事件信息,包括拖拽点坐标。
- extraParams:拖拽事件额外信息,详见[extraParams](#extraparams说明)说明。
当监听了onDrop事件时,此事件才有效。 | | onDragLeave(event: (event?: [DragEvent](#dragevent说明), extraParams?: string) => void) | 否 | 拖拽离开组件范围内时,触发回调。
- event:拖拽事件信息,包括拖拽点坐标。
- extraParams:拖拽事件额外信息,详见[extraParams](#extraparams说明)说明。
当监听了onDrop事件时,此事件才有效。 | @@ -87,10 +88,22 @@ struct Index { getDataFromUdmfRetry(event: DragEvent, callback: (data: DragEvent)=>void) { - let records: Array = event.getData().getRecords(); - if (records.length !== 0) { - callback(event); - return; + let data = event.getData(); + if (!data) { + return false; + } + let records: Array = data.getRecords(); + if (!records || records.length <= 0) { + return false; + } + callback(event); + return true; + } + + getDataFromUdmf(event: DragEvent, callback: (data: DragEvent)=>void) + { + if(this.getDataFromUdmfRetry(event, callback)) { + return; } setTimeout(()=>{ this.getDataFromUdmfRetry(event, callback); @@ -174,7 +187,7 @@ struct Index { .border({color: Color.Black, width: 1}) .allowDrop([udmf.UnifiedDataType.IMAGE]) .onDrop((dragEvent: DragEvent)=> { - this.getDataFromUdmfRetry(dragEvent, (event)=>{ + this.getDataFromUdmf(dragEvent, (event)=>{ let records: Array = event.getData().getRecords(); let rect: Rectangle = event.getPreviewRect(); this.imageWidth = Number(rect.width); @@ -197,7 +210,7 @@ struct Index { .margin(15) .allowDrop([udmf.UnifiedDataType.TEXT]) .onDrop((dragEvent: DragEvent)=>{ - this.getDataFromUdmfRetry(dragEvent, event => { + this.getDataFromUdmf(dragEvent, event => { let records:Array = event.getData().getRecords(); this.targetText = ((records[0])).details['value']; }) @@ -215,7 +228,7 @@ struct Index { }.width('100%').height(100).margin(20).border({color: Color.Black, width: 1}) .allowDrop([udmf.UnifiedDataType.PLAIN_TEXT]) .onDrop((dragEvent)=>{ - this.getDataFromUdmfRetry(dragEvent, event=>{ + this.getDataFromUdmf(dragEvent, event=>{ let records: Array = event.getData().getRecords(); let plainText: udmf.PlainText = (records[0]); this.abstractContent = plainText.abstract;