From 737797478c8768c0c910cb71d2ca6ef28ed46c2a Mon Sep 17 00:00:00 2001 From: Chris Beer <cabeer@stanford.edu> Date: Fri, 1 Feb 2019 11:55:27 -0800 Subject: [PATCH] Compare new state against actual props instead of previous props Comparing against previous props causes zooming and panning to noticably jitter; going straight to the source doesn't have this side-effect --- __tests__/src/components/OpenSeadragonViewer.test.js | 8 +++++++- src/components/OpenSeadragonViewer.js | 10 ++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/__tests__/src/components/OpenSeadragonViewer.test.js b/__tests__/src/components/OpenSeadragonViewer.test.js index 78114e349..2e8c8347c 100644 --- a/__tests__/src/components/OpenSeadragonViewer.test.js +++ b/__tests__/src/components/OpenSeadragonViewer.test.js @@ -115,7 +115,13 @@ describe('OpenSeadragonViewer', () => { const zoomTo = jest.fn(); wrapper.instance().viewer = { - viewport: { panTo, zoomTo }, + viewport: { + centerSpringX: { target: { value: 10 } }, + centerSpringY: { target: { value: 10 } }, + zoomSpring: { target: { value: 1 } }, + panTo, + zoomTo, + }, }; wrapper.setProps({ window: { id: 'base', viewer: { x: 0.5, y: 0.5, zoom: 0.1 } } }); diff --git a/src/components/OpenSeadragonViewer.js b/src/components/OpenSeadragonViewer.js index f3db606ef..d0a12b8d0 100644 --- a/src/components/OpenSeadragonViewer.js +++ b/src/components/OpenSeadragonViewer.js @@ -61,13 +61,15 @@ class OpenSeadragonViewer extends Component { this.fitBounds(0, 0, tileSources[0].width, tileSources[0].height); } }); - } else if (window.viewer && prevProps.window.viewer) { - if (window.viewer.x !== prevProps.window.viewer.x - || window.viewer.y !== prevProps.window.viewer.y) { + } else if (window.viewer) { + const { viewport } = this.viewer; + + if (window.viewer.x !== viewport.centerSpringX.target.value + || window.viewer.y !== viewport.centerSpringY.target.value) { this.viewer.viewport.panTo(window.viewer, false); } - if (window.viewer.zoom !== prevProps.window.viewer.zoom) { + if (window.viewer.zoom !== viewport.zoomSpring.target.value) { this.viewer.viewport.zoomTo(window.viewer.zoom, window.viewer, false); } } -- GitLab