Web Dev Solutions

Catalin Mititiuc

From 2919627c1e8fefb1c9bbd4034419b4fd2b117b9e Mon Sep 17 00:00:00 2001 From: Catalin Mititiuc Date: Wed, 19 Mar 2025 11:22:22 -0700 Subject: WIP: add callback param --- src/app.js | 25 +++++++++++++++++++------ src/modules/with-restore.js | 8 ++++---- src/modules/zoom.js | 13 +++++++++++-- 3 files changed, 34 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/app.js b/src/app.js index 5e9a2e4..02d3bd5 100644 --- a/src/app.js +++ b/src/app.js @@ -1,5 +1,7 @@ -import zoom from './modules/zoom'; -import pan from './modules/pan'; +//import zoom from './modules/zoom'; +//import pan from './modules/pan'; +import * as panzoom from './modules/with-restore'; +import { getTracked } from './modules/utils'; const optionalZoomFactor = 0.1 //, object = document.querySelector('object') @@ -11,12 +13,23 @@ const optionalZoomFactor = 0.1 window.addEventListener('load', function () { const svg = document.querySelector('svg'), - targetEl = svg.querySelector('g.pan-zoom'), + //targetEl = svg.querySelector('g.pan-zoom'), //pointer = svg.querySelector('#pointer'), - options = { passive: false }; + //options = { passive: false }, + groups = getTracked(svg.querySelectorAll('g[class] use')), + afterZoom = async () => { + groups.forEach(([z, p]) => { + z.style.display = ''; + const { width } = z.getBoundingClientRect(); + console.log('width', width); + width < 40 ? z.style.display = 'none' : z.style.display = ''; + }); + }; - svg.addEventListener('wheel', zoom(targetEl, optionalZoomFactor), options); - svg.addEventListener('pointerdown', pan(targetEl), options); + //svg.addEventListener('wheel', zoom(targetEl, optionalZoomFactor, afterZoom), options); + //svg.addEventListener('pointerdown', pan(targetEl), options); + + panzoom.start(svg, 'g.pan-zoom', afterZoom); //svg.addEventListener('pointermove', e => { // const pt = new DOMPoint(e.clientX, e.clientY), diff --git a/src/modules/with-restore.js b/src/modules/with-restore.js index cfe94f7..8614a18 100644 --- a/src/modules/with-restore.js +++ b/src/modules/with-restore.js @@ -10,8 +10,8 @@ function restorePanZoomVal(el) { if (storedPanZoomVal) el.style.transform = storedPanZoomVal; } -function addEventListeners(svg, el) { - svg.addEventListener("wheel", zoom(el, zoomFactor), { passive: false }); +function addEventListeners(svg, el, postZoom) { + svg.addEventListener("wheel", zoom(el, zoomFactor, postZoom), { passive: false }); svg.addEventListener("pointerdown", pan(el), { passive: false }); } @@ -27,10 +27,10 @@ function observePanZoomChanges(el) { observer.observe(el, { attributeFilter: ["style"] }); } -export function start(svg, selector) { +export function start(svg, selector, postZoom) { const targetEl = svg.querySelector(selector); restorePanZoomVal(targetEl); - addEventListeners(svg, targetEl); + addEventListeners(svg, targetEl, postZoom); observePanZoomChanges(targetEl); } diff --git a/src/modules/zoom.js b/src/modules/zoom.js index 69652c0..15e622e 100644 --- a/src/modules/zoom.js +++ b/src/modules/zoom.js @@ -29,9 +29,11 @@ function setTransform(el, computedMtx, translateMtx, scale) { el.style.transform = transformMtx; } -const groups = getTracked(document.querySelectorAll('svg g[class] use')); +let groups = []; + +export default function (el, factor = 0.1, cb) { + groups = getTracked(document.querySelectorAll('svg g[class] use')); -export default function (el, factor = 0.1) { return e => { e.preventDefault(); @@ -40,5 +42,12 @@ export default function (el, factor = 0.1) { const translateMtx = getTranslateMatrix(el, e.clientX, e.clientY); setTransform(el, computedMtx, translateMtx, scale); + + cb(); + //groups.forEach(([z, p]) => { + // z.style.display = ''; + // const { width } = z.getBoundingClientRect(); + // width < 40 ? z.style.display = 'none' : z.style.display = ''; + //}); } } -- cgit v1.2.3