diff --git a/components/modal/modal-util.ts b/components/modal/modal-util.ts deleted file mode 100644 index 25204954e1a..00000000000 --- a/components/modal/modal-util.ts +++ /dev/null @@ -1,24 +0,0 @@ -export interface ClickPosition { - x: number; - y: number; -} - -export class ModalUtil { - private lastPosition: ClickPosition | null = null; - - constructor(private document: Document) { - this.listenDocumentClick(); - } - - getLastClickPosition(): ClickPosition | null { - return this.lastPosition; - } - - listenDocumentClick(): void { - this.document.addEventListener('click', (event: MouseEvent) => { - this.lastPosition = { x: event.clientX, y: event.clientY }; - }); - } -} - -export default new ModalUtil(document); diff --git a/components/modal/nz-modal.component.html b/components/modal/nz-modal.component.html index 8f85e3e2616..10cb898d99f 100644 --- a/components/modal/nz-modal.component.html +++ b/components/modal/nz-modal.component.html @@ -30,7 +30,7 @@ - + @@ -100,7 +100,7 @@
- +
diff --git a/components/modal/nz-modal.component.ts b/components/modal/nz-modal.component.ts index e562d9f0977..7cd34cb5fc9 100644 --- a/components/modal/nz-modal.component.ts +++ b/components/modal/nz-modal.component.ts @@ -30,10 +30,9 @@ import { import { fromEvent, Observable, Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { isPromise, InputBoolean } from 'ng-zorro-antd/core'; +import { getElementOffset, isPromise, InputBoolean } from 'ng-zorro-antd/core'; import { NzI18nService } from 'ng-zorro-antd/i18n'; -import ModalUtil from './modal-util'; import { NzModalConfig, NZ_MODAL_CONFIG } from './nz-modal-config'; import { NzModalControlService } from './nz-modal-control.service'; import { NzModalRef } from './nz-modal-ref.class'; @@ -472,10 +471,12 @@ export class NzModalComponent extends NzModalRef // Update transform-origin to the last click position on document private updateTransformOrigin(): void { const modalElement = this.modalContainer.nativeElement as HTMLElement; - const lastPosition = ModalUtil.getLastClickPosition(); - if (lastPosition) { - this.transformOrigin = `${lastPosition.x - modalElement.offsetLeft}px ${lastPosition.y - - modalElement.offsetTop}px 0px`; + if (this.previouslyFocusedElement) { + const previouslyDOMRect = this.previouslyFocusedElement.getBoundingClientRect(); + const lastPosition = getElementOffset(this.previouslyFocusedElement); + const x = lastPosition.left + previouslyDOMRect.width / 2; + const y = lastPosition.top + previouslyDOMRect.height / 2; + this.transformOrigin = `${x - modalElement.offsetLeft}px ${y - modalElement.offsetTop}px 0px`; } }