From e70a94d305457c4838c4a11e0fd733a12c86bee9 Mon Sep 17 00:00:00 2001 From: laoluo <375119293@qq.com> Date: Tue, 2 Nov 2021 15:05:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=A4=9A=E8=BE=B9?= =?UTF-8?q?=E5=BD=A2=E5=8F=8C=E5=87=BB=E6=93=8D=E4=BD=9C=E7=9A=84=E5=BB=B6?= =?UTF-8?q?=E8=BF=9F=E5=8D=A1=E9=A1=BF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/toolOperation/polygonOperation.ts | 20 ++++++++++++++++++- .../src/utils/tool/DblClickEventListener.ts | 12 +++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/packages/lb-annotation/src/core/toolOperation/polygonOperation.ts b/packages/lb-annotation/src/core/toolOperation/polygonOperation.ts index de03675fe..25ff347ec 100644 --- a/packages/lb-annotation/src/core/toolOperation/polygonOperation.ts +++ b/packages/lb-annotation/src/core/toolOperation/polygonOperation.ts @@ -83,7 +83,7 @@ class PolygonOperation extends BasicToolOperation { this.container.removeEventListener('mouseup', this.onMouseUp); this.container.addEventListener('mouseup', this.dragMouseUp); - this.dblClickListener.addEvent(this.onMouseUp, this.onLeftDblClick, this.onRightDblClick); + this.dblClickListener.addEvent(this.onMouseUp, this.onLeftDblClick, this.onRightDblClick, this.isAllowDouble); } public eventUnbinding() { @@ -113,6 +113,19 @@ class PolygonOperation extends BasicToolOperation { return this.selectedPolygon?.textAttribute; } + // 是否直接执行操作 + public isAllowDouble = (e: MouseEvent) => { + const selectedID = this.selectedID; + + const currentSelectedID = this.getHoverID(e); + // 仅在选中的时候需要 double click + if (selectedID && selectedID === currentSelectedID) { + return true; + } + + return false; + }; + get dataList() { return this.polygonList; } @@ -440,6 +453,11 @@ class PolygonOperation extends BasicToolOperation { this.history.pushHistory(polygonList); } + /** + * 获取当前 hover 多边形的 ID + * @param e + * @returns + */ public getHoverID(e: MouseEvent) { const coordinate = this.getCoordinateUnderZoom(e); const polygonListWithZoom = this.currentShowList.map((polygon) => ({ diff --git a/packages/lb-annotation/src/utils/tool/DblClickEventListener.ts b/packages/lb-annotation/src/utils/tool/DblClickEventListener.ts index b994c3279..7bf23dc22 100644 --- a/packages/lb-annotation/src/utils/tool/DblClickEventListener.ts +++ b/packages/lb-annotation/src/utils/tool/DblClickEventListener.ts @@ -73,10 +73,16 @@ class DblClickEventListener { * @param {*} singleClickFun * @param {*} leftDblClick * @param {*} rightDblClick + * @param {*} isAllowDouble 是否允许执行 double click,如果为 true 则进行的延迟,否则将立即执行,增加操作流畅性 * @returns {void} * @memberof DblClickEventListen */ - public addEvent(singleClickFun: any, leftDblClick: any, rightDblClick: any): void { + public addEvent( + singleClickFun: any, + leftDblClick: any, + rightDblClick: any, + isAllowDouble?: (e: any) => boolean, + ): void { if (!this.dom) { return; } @@ -85,8 +91,10 @@ class DblClickEventListener { this.mouseUp = (e: MouseEvent) => { const cTime = new Date().getTime(); + const isDoubleClick = isAllowDouble ? isAllowDouble(e) : true; + // down 和 up 超过 delay 时间直接判断为点击事件 - if (cTime - this.mouseDownTime > this.delay) { + if (cTime - this.mouseDownTime > this.delay || isDoubleClick !== true) { singleClickFun(e); return; }