<!DOCTYPE html> <html lang="en" style="scrollbar-gutter:stable;"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="csrf-token" content="ChUeOAonMUFoFAUTBjYnKCIGFwQXWFQJyLiU2uau-GhkKqTxiLDMaudY"> <title data-suffix=" · Catalin Mititiuc"> WebDevCat.me · Catalin Mititiuc</title> <link rel="stylesheet" id="font-bitter-css" href="//fonts.googleapis.com/css?family=Bitter:400,700" type="text/css" media="screen"> <link phx-track-static rel="stylesheet" href="/assets/app-131585bb1e255488c3d2558ee5c81330.css?vsn=d"> <link phx-track-static rel="stylesheet" href="/assets/cgit-313ed4244ed6cc8d5b67d6fbb4ab18c8.css?vsn=d"> <style> article > * { max-width: unset; } div#cgit table.list { table-layout: auto; width: 100%; display: table; } div#cgit div.content { overflow: scroll; } div#cgit table.tabs { table-layout: auto; width: 100%; display: table; } div#cgit table.blob { table-layout: auto; width: 100%; display: table; } div#cgit table.tabs { table-layout: auto; width: 100%; display: table; } td.linenumbers { width: 1px; } td.lines { max-width: 1px; overflow: hidden; } td.linenumbers pre, td.lines pre { line-height: 1.25em; } pre { overflow-x: scroll; overflow-y: hidden; } code { font-size: unset; } </style> <script defer phx-track-static type="text/javascript" src="/assets/app-7bb68f31e771b77e6d1026a2eca15d48.js?vsn=d"> </script> </head> <body class="bg-white"> <header> <div style="display: inline-block;"> <h1><a href="/">Web Dev Solutions</a></h1> <h3 style="text-align: left">Catalin Mititiuc</h3> </div> </header> <main> <article> From b443b37a1110866db1352cf201f14f1916cd217b Mon Sep 17 00:00:00 2001 From: Catalin Mititiuc <webdevcat@proton.me> Date: Mon, 22 Apr 2024 11:43:31 -0700 Subject: Update storing pan & zoom changes to localStorage --- src/index.js | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) (limited to 'src/index.js') diff --git a/src/index.js b/src/index.js index 84001d4..cb746f4 100644 --- a/src/index.js +++ b/src/index.js @@ -2,36 +2,31 @@ import { pan, zoom } from 'svg-pan-zoom'; import Game from './modules/game.js'; const PanZoom = new function () { - const vb = 'viewBox'; - let svg; + const storageKey = 'pan-zoom'; - function storeViewBoxVal() { - localStorage.setItem(vb, svg.getAttribute(vb)); + function storePanZoomVal(transformMatrix) { + localStorage.setItem(storageKey, transformMatrix); } - function observeViewBoxChanges() { - const observer = new MutationObserver(mutations => { - if (mutations.find(m => m.target == svg && m.attributeName == vb)) { - storeViewBoxVal(svg); - } - }); + function observePanZoomChanges(svg) { + const observer = new MutationObserver(() => storePanZoomVal(svg.style.transform)); - observer.observe(svg, { attributes: true }); + observer.observe(svg, { attributeFilter: ['style'] }); } - function restoreViewBoxVal() { - const storedVbVal = localStorage.getItem(vb); + function restorePanZoomVal(svg) { + const storedPanZoomVal = localStorage.getItem(storageKey); - if (storedVbVal) { - svg.setAttributeNS(null, vb, storedVbVal); + if (storedPanZoomVal) { + svg.style.transform = storedPanZoomVal; } } - function addEventListeners() { + function addEventListeners(svg) { svg.addEventListener('wheel', e => { e.preventDefault(); - svg.setAttributeNS(null, vb, zoom(svg, e)); + zoom(svg, e); }, { passive: false }); svg.addEventListener('pointerdown', e => { @@ -41,11 +36,10 @@ const PanZoom = new function () { }, { passive: false }); } - this.start = function (el) { - svg = el; - restoreViewBoxVal(); - addEventListeners(); - observeViewBoxChanges(); + this.start = function (svg) { + restorePanZoomVal(svg); + addEventListeners(svg); + observePanZoomChanges(svg); }; }; -- cgit v1.2.3 </article> </main> <footer> <p>100% Human Made, No AI Used</p> <p>stasis 0.2.12</p> </footer> </body> </html>