Update storing pan & zoom changes to localStorage
This commit is contained in:
parent
b812884bdf
commit
d36236d0fe
38
src/index.js
38
src/index.js
@ -2,36 +2,31 @@ import { pan, zoom } from 'svg-pan-zoom';
|
|||||||
import Game from './modules/game.js';
|
import Game from './modules/game.js';
|
||||||
|
|
||||||
const PanZoom = new function () {
|
const PanZoom = new function () {
|
||||||
const vb = 'viewBox';
|
const storageKey = 'pan-zoom';
|
||||||
let svg;
|
|
||||||
|
|
||||||
function storeViewBoxVal() {
|
function storePanZoomVal(transformMatrix) {
|
||||||
localStorage.setItem(vb, svg.getAttribute(vb));
|
localStorage.setItem(storageKey, transformMatrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
function observeViewBoxChanges() {
|
function observePanZoomChanges(svg) {
|
||||||
const observer = new MutationObserver(mutations => {
|
const observer = new MutationObserver(() => storePanZoomVal(svg.style.transform));
|
||||||
if (mutations.find(m => m.target == svg && m.attributeName == vb)) {
|
|
||||||
storeViewBoxVal(svg);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
observer.observe(svg, { attributes: true });
|
observer.observe(svg, { attributeFilter: ['style'] });
|
||||||
}
|
}
|
||||||
|
|
||||||
function restoreViewBoxVal() {
|
function restorePanZoomVal(svg) {
|
||||||
const storedVbVal = localStorage.getItem(vb);
|
const storedPanZoomVal = localStorage.getItem(storageKey);
|
||||||
|
|
||||||
if (storedVbVal) {
|
if (storedPanZoomVal) {
|
||||||
svg.setAttributeNS(null, vb, storedVbVal);
|
svg.style.transform = storedPanZoomVal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addEventListeners() {
|
function addEventListeners(svg) {
|
||||||
svg.addEventListener('wheel', e => {
|
svg.addEventListener('wheel', e => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
svg.setAttributeNS(null, vb, zoom(svg, e));
|
zoom(svg, e);
|
||||||
}, { passive: false });
|
}, { passive: false });
|
||||||
|
|
||||||
svg.addEventListener('pointerdown', e => {
|
svg.addEventListener('pointerdown', e => {
|
||||||
@ -41,11 +36,10 @@ const PanZoom = new function () {
|
|||||||
}, { passive: false });
|
}, { passive: false });
|
||||||
}
|
}
|
||||||
|
|
||||||
this.start = function (el) {
|
this.start = function (svg) {
|
||||||
svg = el;
|
restorePanZoomVal(svg);
|
||||||
restoreViewBoxVal();
|
addEventListeners(svg);
|
||||||
addEventListeners();
|
observePanZoomChanges(svg);
|
||||||
observeViewBoxChanges();
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user