index : pan-zoom | |
SVG pan/zoom library. |
aboutsummaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/modules/pan.js')
-rw-r--r-- | src/modules/pan.js | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/modules/pan.js b/src/modules/pan.js index 4e6485c..bf842bd 100644 --- a/src/modules/pan.js +++ b/src/modules/pan.js @@ -1,4 +1,4 @@ -import getComputedTransformMatrix from './utils.js'; +import { default as getComputedTransformMatrix } from './utils'; const minDistanceThreshold = 5; @@ -31,23 +31,26 @@ function getTransformMatrices(el) { }; } -function clientToSvgPt({ clientX, clientY }, { inverseScreen }, pt = new DOMPoint()) { - pt.x = clientX; - pt.y = clientY; - return pt.matrixTransform(inverseScreen); +function clientToSvgPt(e, inverseScreenMtx, pt = new DOMPoint()) { + pt.x = e.clientX; + pt.y = e.clientY; + return pt.matrixTransform(inverseScreenMtx); } -function setPanTransform(el, { computed }, startPt, endPt) { - el.style.transform = computed.multiply(getTranslateMatrix(startPt, endPt)); +function setTransform(el, computedMtx, startPt, endPt) { + const translateMtx = getTranslateMatrix(startPt, endPt); + const transformMtx = computedMtx.multiply(translateMtx); + + el.style.transform = transformMtx; } export function programmaticPan(el, from, to) { const matrices = getTransformMatrices(el); - const startPt = clientToSvgPt(from, matrices); - const endPt = clientToSvgPt(to, matrices); + const startPt = clientToSvgPt(from, matrices.inverseScreen); + const endPt = clientToSvgPt(to, matrices.inverseScreen); el.style.transition = 'transform 0.5s'; - setPanTransform(el, matrices, startPt, endPt); + setTransform(el, matrices.computed, startPt, endPt); el.addEventListener('transitionend', () => el.style.transition = '', { once: true }); } @@ -60,13 +63,13 @@ export default function (el) { if (!isPanning && exceedsMinDistanceThreshhold(startPt, movePt)) { isPanning = true; - startPt = clientToSvgPt(e, matrices, startPt); + startPt = clientToSvgPt(e, matrices.inverseScreen, startPt); stopEventPropagationToChildren(el, 'click'); } if (isPanning) { - movePt = clientToSvgPt(e, matrices, movePt); - setPanTransform(el, matrices, startPt, movePt); + movePt = clientToSvgPt(e, matrices.inverseScreen, movePt); + setTransform(el, matrices.computed, startPt, movePt); } } |