feat(panOnScroll): add speed option

This commit is contained in:
moklick
2020-11-03 15:58:47 +01:00
parent 4216f20265
commit b88729fbf1
4 changed files with 24 additions and 10 deletions
+2
View File
@@ -38,6 +38,7 @@ const FlowRenderer = ({
elementsSelectable,
zoomOnScroll,
panOnScroll,
panOnScrollSpeed,
zoomOnDoubleClick,
paneMoveable,
defaultPosition,
@@ -85,6 +86,7 @@ const FlowRenderer = ({
elementsSelectable={elementsSelectable}
zoomOnScroll={zoomOnScroll}
panOnScroll={panOnScroll}
panOnScrollSpeed={panOnScrollSpeed}
zoomOnDoubleClick={zoomOnDoubleClick}
paneMoveable={paneMoveable}
defaultPosition={defaultPosition}
+3
View File
@@ -71,6 +71,7 @@ export interface GraphViewProps {
markerEndId?: string;
zoomOnScroll?: boolean;
panOnScroll?: boolean;
panOnScrollSpeed?: number;
zoomOnDoubleClick?: boolean;
paneMoveable?: boolean;
}
@@ -120,6 +121,7 @@ const GraphView = ({
markerEndId,
zoomOnScroll,
panOnScroll,
panOnScrollSpeed,
zoomOnDoubleClick,
paneMoveable,
onPaneClick,
@@ -254,6 +256,7 @@ const GraphView = ({
zoomOnScroll={zoomOnScroll}
zoomOnDoubleClick={zoomOnDoubleClick}
panOnScroll={panOnScroll}
panOnScrollSpeed={panOnScrollSpeed}
paneMoveable={paneMoveable}
defaultPosition={defaultPosition}
defaultZoom={defaultZoom}
+3
View File
@@ -99,6 +99,7 @@ export interface ReactFlowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'on
markerEndId?: string;
zoomOnScroll?: boolean;
panOnScroll?: boolean;
panOnScrollSpeed?: number;
zoomOnDoubleClick?: boolean;
}
@@ -149,6 +150,7 @@ const ReactFlow = ({
markerEndId,
zoomOnScroll = true,
panOnScroll = false,
panOnScrollSpeed = 0.5,
zoomOnDoubleClick = true,
paneMoveable = true,
onPaneClick,
@@ -206,6 +208,7 @@ const ReactFlow = ({
zoomOnScroll={zoomOnScroll}
zoomOnDoubleClick={zoomOnDoubleClick}
panOnScroll={panOnScroll}
panOnScrollSpeed={panOnScrollSpeed}
paneMoveable={paneMoveable}
onPaneClick={onPaneClick}
onPaneScroll={onPaneScroll}
+16 -10
View File
@@ -9,6 +9,7 @@ interface ZoomPaneProps {
elementsSelectable?: boolean;
zoomOnScroll?: boolean;
panOnScroll?: boolean;
panOnScrollSpeed?: number;
zoomOnDoubleClick?: boolean;
paneMoveable?: boolean;
defaultPosition?: [number, number];
@@ -37,6 +38,7 @@ const ZoomPane = ({
onMoveEnd,
zoomOnScroll = true,
panOnScroll = false,
panOnScrollSpeed = 0.5,
zoomOnDoubleClick = true,
selectionKeyPressed,
elementsSelectable,
@@ -66,19 +68,23 @@ const ZoomPane = ({
useEffect(() => {
if (d3Selection && d3Zoom) {
const pan = (evt: any) => {
d3Zoom.translateBy(d3Selection, evt.wheelDeltaX, evt.wheelDeltaY);
};
if (panOnScroll) {
d3Selection.on('wheel', pan).on('wheel.zoom', null);
} else {
if (typeof d3ZoomHandler !== 'undefined') {
d3Selection.on('wheel', null).on('wheel.zoom', d3ZoomHandler);
}
d3Selection
.on('wheel', (event: any) => {
const currentZoom = d3Selection.property('__zoom').k || 1;
d3Zoom.translateBy(
d3Selection,
(event.wheelDeltaX / currentZoom) * panOnScrollSpeed,
(event.wheelDeltaY / currentZoom) * panOnScrollSpeed
);
})
.on('wheel.zoom', null);
} else if (typeof d3ZoomHandler !== 'undefined') {
d3Selection.on('wheel', null).on('wheel.zoom', d3ZoomHandler);
}
}
}, [panOnScroll, d3Selection, d3Zoom]);
}, [panOnScroll, d3Selection, d3Zoom, d3ZoomHandler]);
useEffect(() => {
if (d3Zoom) {