From 3d2035e1a068ca54e5a4c0b87a308ba53f94cfd1 Mon Sep 17 00:00:00 2001 From: gou4shi1 Date: Thu, 15 Nov 2018 11:43:38 +0800 Subject: [PATCH] getCoordsRelativeToElement: use getBoundingClientRect and clientX/Y. --- src/utils/MouseHelper.ts | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/src/utils/MouseHelper.ts b/src/utils/MouseHelper.ts index ca1bb27e..c3f78e84 100644 --- a/src/utils/MouseHelper.ts +++ b/src/utils/MouseHelper.ts @@ -13,29 +13,10 @@ export class MouseHelper { this._renderer = renderer; } - public static getCoordsRelativeToElement(event: {pageX: number, pageY: number}, element: HTMLElement): [number, number] { - // Ignore browsers that don't support MouseEvent.pageX - if (event.pageX === null || event.pageX === undefined) { - return null; - } - - const originalElement = element; - let x = event.pageX; - let y = event.pageY; - - // Converts the coordinates from being relative to the document to being - // relative to the terminal. - while (element) { - x -= element.offsetLeft; - y -= element.offsetTop; - element = element.offsetParent; - } - element = originalElement; - while (element && element !== element.ownerDocument.body) { - x += element.scrollLeft; - y += element.scrollTop; - element = element.parentElement; - } + public static getCoordsRelativeToElement(event: {target: HTMLElement, clientX: number, clientY: number}, element: HTMLElement): [number, number] { + let rect = event.target.getBoundingClientRect(); + let x = event.clientX - rect.left; + let y = event.clientY - rect.top; return [x, y]; }