【发布时间】:2014-05-28 18:37:48
【问题描述】:
我正在构建一个基于 svg 的应用程序,它使用 »root« svg 作为 Viewport/Canvas。在这个中,我加载了一个设置所有图形的 SVG,那个非常大(~18.000px * 800px,4MB)。我正在尝试创建视差效果,该效果适用于<rect> 等原始图形元素。但它不适用于<g> 元素。
相关代码很难贴,因为图形已经很大了,所以下面你可以看一个基本设置的例子:
<svg class="root" width="1000" height="800">
<g class="container" transform="matrix(1,0,0,1,<dx>,<dy>)">
<svg width="16000" height="800">
<!-- a lot of graphics here -->
<g>
<!-- the group with all the graphics for the parallax -->
<g class="parallax" transform="matrix(<crazy inkscape values here>);">
</g>
</g>
<!-- a lot of graphics here -->
</svg>
</g>
</svg>
总而言之,我需要访问整个组的宽度来计算视差偏移量,因此我使用的是:
<g>.getBBox();
what 返回一个宽度大约为2.5 倍的值。我用<Rect> 在 DOM 中的同一位置替换了该组,一切正常。
什么可能导致返回的边界框变大,可能是<gradient>-、<symbol>- 或<use>- 元素?
我很欣赏任何想法。
顺便说一句:这里已经考虑到坐标的转换,至少是尽可能的。我在 FF 和 Chromium 中对此进行了测试——到处都是一样的……
提前谢谢!
编辑
我想我找到了错误的原因。这一次不是我的。图形是由 Illustrator 提供的,使用 Illustrator,在原始文件中我发现了几个空路径。他们将 bbox 跨越到 0/0,即使那里没有真正的点......
【问题讨论】:
-
对 bbox 有贡献(或没有)的空路径已在此处讨论:lists.w3.org/Archives/Public/www-svg/2014Feb/0065.html。
标签: svg bounding-box