diff --git a/src/container/FlowRenderer/index.tsx b/src/container/FlowRenderer/index.tsx
index 40fd16c7..bc976a87 100644
--- a/src/container/FlowRenderer/index.tsx
+++ b/src/container/FlowRenderer/index.tsx
@@ -49,6 +49,7 @@ const FlowRenderer = ({
defaultPosition,
defaultZoom,
translateExtent,
+ preventScrolling,
onSelectionDragStart,
onSelectionDrag,
onSelectionDragStop,
@@ -103,6 +104,7 @@ const FlowRenderer = ({
defaultZoom={defaultZoom}
translateExtent={translateExtent}
zoomActivationKeyCode={zoomActivationKeyCode}
+ preventScrolling={preventScrolling}
>
{children}
diff --git a/src/container/GraphView/index.tsx b/src/container/GraphView/index.tsx
index c3afca89..e002f366 100644
--- a/src/container/GraphView/index.tsx
+++ b/src/container/GraphView/index.tsx
@@ -73,6 +73,7 @@ const GraphView = ({
defaultZoom,
defaultPosition,
translateExtent,
+ preventScrolling,
nodeExtent,
arrowHeadColor,
markerEndId,
@@ -244,6 +245,7 @@ const GraphView = ({
onSelectionDrag={onSelectionDrag}
onSelectionDragStop={onSelectionDragStop}
onSelectionContextMenu={onSelectionContextMenu}
+ preventScrolling={preventScrolling}
>
, 'on
defaultZoom?: number;
defaultPosition?: [number, number];
translateExtent?: TranslateExtent;
+ preventScrolling?: boolean;
nodeExtent?: NodeExtent;
arrowHeadColor?: string;
markerEndId?: string;
@@ -181,6 +182,7 @@ const ReactFlow = forwardRef(
defaultZoom = 1,
defaultPosition = [0, 0],
translateExtent,
+ preventScrolling = true,
nodeExtent,
arrowHeadColor = '#b1b1b7',
markerEndId,
@@ -258,6 +260,7 @@ const ReactFlow = forwardRef(
defaultZoom={defaultZoom}
defaultPosition={defaultPosition}
translateExtent={translateExtent}
+ preventScrolling={preventScrolling}
nodeExtent={nodeExtent}
arrowHeadColor={arrowHeadColor}
markerEndId={markerEndId}
diff --git a/src/container/ZoomPane/index.tsx b/src/container/ZoomPane/index.tsx
index e18801e0..9bf54ea4 100644
--- a/src/container/ZoomPane/index.tsx
+++ b/src/container/ZoomPane/index.tsx
@@ -25,6 +25,7 @@ interface ZoomPaneProps {
onMoveStart?: (flowTransform?: FlowTransform) => void;
onMoveEnd?: (flowTransform?: FlowTransform) => void;
zoomActivationKeyCode?: KeyCode;
+ preventScrolling?: boolean;
children: ReactNode;
}
@@ -39,6 +40,8 @@ const eventToFlowTransform = (eventTransform: any): FlowTransform => ({
zoom: eventTransform.k,
});
+const hasNoWheelClass = (event: any) => event.target.closest('.nowheel');
+
const ZoomPane = ({
onMove,
onMoveStart,
@@ -56,6 +59,7 @@ const ZoomPane = ({
defaultZoom = 1,
translateExtent,
zoomActivationKeyCode,
+ preventScrolling = true,
children,
}: ZoomPaneProps) => {
const zoomPane = useRef(null);
@@ -102,7 +106,7 @@ const ZoomPane = ({
if (panOnScroll && !zoomActivationKeyPressed) {
d3Selection
.on('wheel', (event: any) => {
- if (event.target.closest('.nowheel')) {
+ if (hasNoWheelClass(event)) {
return false;
}
event.preventDefault();
@@ -134,10 +138,27 @@ const ZoomPane = ({
})
.on('wheel.zoom', null);
} else if (typeof d3ZoomHandler !== 'undefined') {
- d3Selection.on('wheel', null).on('wheel.zoom', d3ZoomHandler);
+ d3Selection
+ .on('wheel', (event: any) => {
+ if (!preventScrolling || hasNoWheelClass(event)) {
+ return null;
+ }
+
+ event.preventDefault();
+ })
+ .on('wheel.zoom', d3ZoomHandler);
}
}
- }, [panOnScroll, panOnScrollMode, d3Selection, d3Zoom, d3ZoomHandler, zoomActivationKeyPressed, zoomOnPinch]);
+ }, [
+ panOnScroll,
+ panOnScrollMode,
+ d3Selection,
+ d3Zoom,
+ d3ZoomHandler,
+ zoomActivationKeyPressed,
+ zoomOnPinch,
+ preventScrolling,
+ ]);
useEffect(() => {
if (d3Zoom) {
@@ -211,7 +232,7 @@ const ZoomPane = ({
return false;
}
- if (event.target.closest('.nowheel') && event.type === 'wheel') {
+ if (hasNoWheelClass(event) && event.type === 'wheel') {
return false;
}