refactor(zomm): simplify
This commit is contained in:
@@ -92,49 +92,46 @@ const ZoomPane = ({
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (d3Selection && d3Zoom) {
|
if (d3Selection && d3Zoom) {
|
||||||
if (panOnScroll && !zoomActivationKeyPressed) {
|
if (panOnScroll && !zoomActivationKeyPressed) {
|
||||||
d3Selection
|
d3Selection.on('wheel.zoom', (event: any) => {
|
||||||
.on('wheel', (event: any) => {
|
if (isWrappedWithClass(event, noWheelClassName)) {
|
||||||
if (isWrappedWithClass(event, noWheelClassName)) {
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
event.preventDefault();
|
||||||
event.preventDefault();
|
event.stopImmediatePropagation();
|
||||||
event.stopImmediatePropagation();
|
|
||||||
|
|
||||||
const currentZoom = d3Selection.property('__zoom').k || 1;
|
const currentZoom = d3Selection.property('__zoom').k || 1;
|
||||||
|
|
||||||
if (event.ctrlKey && zoomOnPinch) {
|
if (event.ctrlKey && zoomOnPinch) {
|
||||||
const point = pointer(event);
|
const point = pointer(event);
|
||||||
// taken from https://github.com/d3/d3-zoom/blob/master/src/zoom.js
|
// taken from https://github.com/d3/d3-zoom/blob/master/src/zoom.js
|
||||||
const pinchDelta = -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * 10;
|
const pinchDelta = -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * 10;
|
||||||
const zoom = currentZoom * Math.pow(2, pinchDelta);
|
const zoom = currentZoom * Math.pow(2, pinchDelta);
|
||||||
d3Zoom.scaleTo(d3Selection, zoom, point);
|
d3Zoom.scaleTo(d3Selection, zoom, point);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// increase scroll speed in firefox
|
// increase scroll speed in firefox
|
||||||
// firefox: deltaMode === 1; chrome: deltaMode === 0
|
// firefox: deltaMode === 1; chrome: deltaMode === 0
|
||||||
const deltaNormalize = event.deltaMode === 1 ? 20 : 1;
|
const deltaNormalize = event.deltaMode === 1 ? 20 : 1;
|
||||||
const deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize;
|
const deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize;
|
||||||
const deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize;
|
const deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize;
|
||||||
|
|
||||||
d3Zoom.translateBy(
|
d3Zoom.translateBy(
|
||||||
d3Selection,
|
d3Selection,
|
||||||
-(deltaX / currentZoom) * panOnScrollSpeed,
|
-(deltaX / currentZoom) * panOnScrollSpeed,
|
||||||
-(deltaY / currentZoom) * panOnScrollSpeed
|
-(deltaY / currentZoom) * panOnScrollSpeed
|
||||||
);
|
);
|
||||||
})
|
});
|
||||||
.on('wheel.zoom', null);
|
|
||||||
} else if (typeof d3ZoomHandler !== 'undefined') {
|
} else if (typeof d3ZoomHandler !== 'undefined') {
|
||||||
d3Selection
|
d3Selection.on('wheel.zoom', function (event: any, d: any) {
|
||||||
.on('wheel', (event: any) => {
|
if (!preventScrolling || isWrappedWithClass(event, noWheelClassName)) {
|
||||||
if (!preventScrolling || isWrappedWithClass(event, noWheelClassName)) {
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
})
|
d3ZoomHandler.call(this, event, d);
|
||||||
.on('wheel.zoom', d3ZoomHandler);
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [
|
}, [
|
||||||
|
|||||||
Reference in New Issue
Block a user