gpt4 book ai didi

svg - getBBox() SVGRect 是如何计算的?

转载 作者:行者123 更新时间:2023-12-01 19:27:55 24 4
gpt4 key购买 nike

我有一个 g 元素,其中包含一个或多个 path 元素。正如我在 another question 中提到的中,我通过计算 transform 属性来缩放和平移 g 元素,使其适合 Canvas 另一部分的网格。

计算是使用两个矩形之间的差异来完成的,即来自 g 元素的 getBBox() 和网格周围的矩形。

问题是 - 在进行转换后,我更新了 g 元素的内容并再次调用 getBBox()没有 删除转换。生成的矩形似乎是在不考虑变换的情况下计算的。我本来希望它能够反射(reflect)这种变化。此行为符合 SVG 规范吗?如何获取变换后的矩形的边界框?

顺便说一句,这是在 Firefox 4 中运行的 HTML 5 文档中,如果这有什么区别的话。

更新:显然这种行为显然违反了规范。来自文字here at w3c :

SVGRect getBBox()

Returns the tight bounding box in current user space (i.e., after application of the ‘transform’ attribute, if any) on the geometry of all contained graphics elements, exclusive of stroking, clipping, masking and filter effects). Note that getBBox must return the actual bounding box at the time the method was called, even in case the element has not yet been rendered.

我读得正确吗?如果是这样,这似乎是 Firefox 使用的 SVG 实现中的一个勘误表;我还没有机会尝试其他的。如果有人能指出我的位置,我会提交一份错误报告。

最佳答案

人们经常对 getBBox 和 getBoundingClientRect 的行为差异感到困惑。

getBBox 是 SVG 元素的 native 方法,相当于查找 HTML DOM 元素的 offset/clientwidth。即使元素旋转,宽度和高度也不会改变。它不能用于 HTML DOM 元素。

getBoundingClientRect 对于 HTML 和 SVG 元素都是通用的。 bounded rectangle宽度和高度将在元素旋转时或更多元素分组时发生变化。

关于svg - getBBox() SVGRect 是如何计算的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6179173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com