Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Panning and zooming not working on nested #71

Open
bpatzak opened this issue May 3, 2020 · 3 comments
Open

Panning and zooming not working on nested #71

bpatzak opened this issue May 3, 2020 · 3 comments

Comments

@bpatzak
Copy link

bpatzak commented May 3, 2020

Hi, I got impression, that when I have two nested containers and apply panZoom on one of then, the entities in the second container do not pan and zoom.
The problem is demonstrated here: https://codepen.io/bpatzak/pen/XWmzMwv
The zooming does not work and the red rectangle (in nested container subjected to panZoom) moves only when the mouse is inside the rectangle.
Any help will be appreciated.

@Fuzzyma
Copy link
Member

Fuzzyma commented May 5, 2020

Didnt find a mistake after having a short look. Might be a bug. Have to look into that deeper. Sorry for the inconvinience!

@benjaminbours
Copy link

benjaminbours commented May 27, 2020

Same issue for me 👍

After investigation about the zoom, I realised the difference between a zoom from the root svg and the nested one is that for the root, there are values for the clientWidth and clientHeight properties, when for the nested one I always get 0.

Looking at the current master of the core library I found this commit svgdotjs/svg.js@a6dae04, which differ from the current released code, but it will make it clearer why it's not zooming when released.

So first it's not an issue with this plugin, it comes from the main library. And then, my current fix is this

      const nested = draw
        .nested()
        .size("50%", "100%")
        .attr({
          style: "width: 50%; height: 100%;",
        })
        .panZoom({ zoomMin: 0.1, zoomMax: 20, zoomFactor: 0.5 });

Apparently, the attributes width and height are not detected properly by the zoom function, and in the current released code, when it's the case the fallback is to get value from the style.

@Fuzzyma
Copy link
Member

Fuzzyma commented May 27, 2020

Thank you for investigating @benjaminbours. I simply hadnt the brain ressources atm...
But after knowing the bug its pretty clear 😄

Yes, clientHeight and width is only defined on a root element because the specs says so. Thats why we try to get the dimensions differently. In the current released version (3.0.16) there was an additional getComputedStyle check for width and height but that often just leads to "auto" if no stye is set. Thats why in 3.1.0 it was remoed and the zoom function will throw if there is no width/height set on the element or clientHeight/width is not usable.

But I just realized that it wont throw with percentage values which it shoult... need to a add a check for that

PS: in 3.1.0 your fix therefore wont work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants