From c5331edeb63c6ad93c402ef9f0a06d8f74650633 Mon Sep 17 00:00:00 2001 From: Gabriele Petrioli Date: Fri, 27 Jan 2023 12:42:01 +0200 Subject: [PATCH] Limit when to prevent the default wheel event Only prevent the default event when there will be internal grid scroll --- packages/toast-ui.grid/src/view/bodyArea.tsx | 23 +++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/toast-ui.grid/src/view/bodyArea.tsx b/packages/toast-ui.grid/src/view/bodyArea.tsx index 571314e15..8b337ccc5 100644 --- a/packages/toast-ui.grid/src/view/bodyArea.tsx +++ b/packages/toast-ui.grid/src/view/bodyArea.tsx @@ -116,10 +116,27 @@ class BodyAreaComp extends Component { private handleWheel = (ev: WheelEvent) => { const currentTarget = ev.currentTarget as HTMLElement; - ev.preventDefault(); + const { deltaX, deltaY } = ev; + const { + offsetHeight, + offsetWidth, + scrollHeight, + scrollWidth, + scrollTop, + scrollLeft, + } = currentTarget; + + const willScrollUp = deltaY < 0 && scrollTop > 0; + const willScrollDown = deltaY > 0 && scrollTop + offsetHeight < scrollHeight; + const willScrollLeft = deltaX < 0 && scrollLeft > 0; + const willScrollRight = deltaX > 0 && scrollLeft + offsetWidth < scrollWidth; + + if (willScrollUp || willScrollDown || willScrollLeft || willScrollRight) { + ev.preventDefault(); + } - currentTarget.scrollTop += ev.deltaY; - currentTarget.scrollLeft += ev.deltaX; + currentTarget.scrollTop += deltaY; + currentTarget.scrollLeft += deltaX; }; private handleScroll = (ev: UIEvent) => {