Raphael.js 函数 getBBox 在 IE8 中返回 NAN/NAN/NAN
Raphael.js function getBBox give back NAN/NAN/NAN in IE8
使用 Raphaël 2.1.4 - JavaScript 矢量库
做这样的事情:
var textDummy = paper.text(50,500, 'hello world').attr({fill: 'transparent', 'font-size': 14});
var textBox = textDummy.getBBox();
用 chrome 和 firefox 一切都很好,
但在 IE8 中它返回 NaN/NaN/NaN,
par example textBox.height 是 NaN.
我该如何解决这个问题?
我从 这个问题的答案中找到了解决方法
"Raphael JS and Text positioning"
如果我使用 _getBBox()
而不是 getBBox()
一切都在 ie 8 中工作。
_getBBox() is undocumented but used internally by Raphael itself, and it works!
我在 Rapahel 2.2.0 和 2.2.1 中遇到了同样的问题,使用 ._getBBox()
并没有为我解决问题。
如果它已定义且常规 .getBBox()
不起作用,则为我修复它的方法是回退到 .auxGetBBox()
,如下所示:
var bbox = path.getBBox( );
// Workaround for apparent bug in Raphael's VML module's getBBox() override
if( isNaN( bbox.x ) && path.auxGetBBox ){
bbox = path.auxGetBBox();
}
我没有针对底层错误的修复程序,但我找到了它的根源。
在 VML 模式下,Raphael 使用初始的 getBBox()
函数,将其保存为元素原型上的 auxGetBBox()
,然后用一个看似损坏的函数替换它。
它有基于定义为 var z = 1/this.paper._viewBoxShift.scale;
的变量的计算,这显然期望 _viewBoxShift.scale 是当前视图框与初始视图框相比的比例的一些因素,但实际上 _viewBoxShift.scale
是一个像这样的对象,它似乎来自 paperproto.getSize()
:
{ height: someNumber, width: someNumber }
这是所有 NaN
的来源。 Cannae 除以一个对象。
因此,如果未使用视图框应用缩放,此解决方法可以正常工作,但如果已应用缩放,则可能会给出不正确的结果(在 VML 模式下的最新版本的 raphael 中,我根本无法工作,但这是一个单独的问题)。修复 that 将涉及深入挖掘 Raphael 的 VML 模块以将适当的缩放因子传递给此 z
变量。
使用 Raphaël 2.1.4 - JavaScript 矢量库 做这样的事情:
var textDummy = paper.text(50,500, 'hello world').attr({fill: 'transparent', 'font-size': 14});
var textBox = textDummy.getBBox();
用 chrome 和 firefox 一切都很好, 但在 IE8 中它返回 NaN/NaN/NaN, par example textBox.height 是 NaN.
我该如何解决这个问题?
我从 这个问题的答案中找到了解决方法 "Raphael JS and Text positioning"
如果我使用 _getBBox()
而不是 getBBox()
一切都在 ie 8 中工作。
_getBBox() is undocumented but used internally by Raphael itself, and it works!
我在 Rapahel 2.2.0 和 2.2.1 中遇到了同样的问题,使用 ._getBBox()
并没有为我解决问题。
如果它已定义且常规 .getBBox()
不起作用,则为我修复它的方法是回退到 .auxGetBBox()
,如下所示:
var bbox = path.getBBox( );
// Workaround for apparent bug in Raphael's VML module's getBBox() override
if( isNaN( bbox.x ) && path.auxGetBBox ){
bbox = path.auxGetBBox();
}
我没有针对底层错误的修复程序,但我找到了它的根源。
在 VML 模式下,Raphael 使用初始的 getBBox()
函数,将其保存为元素原型上的 auxGetBBox()
,然后用一个看似损坏的函数替换它。
它有基于定义为 var z = 1/this.paper._viewBoxShift.scale;
的变量的计算,这显然期望 _viewBoxShift.scale 是当前视图框与初始视图框相比的比例的一些因素,但实际上 _viewBoxShift.scale
是一个像这样的对象,它似乎来自 paperproto.getSize()
:
{ height: someNumber, width: someNumber }
这是所有 NaN
的来源。 Cannae 除以一个对象。
因此,如果未使用视图框应用缩放,此解决方法可以正常工作,但如果已应用缩放,则可能会给出不正确的结果(在 VML 模式下的最新版本的 raphael 中,我根本无法工作,但这是一个单独的问题)。修复 that 将涉及深入挖掘 Raphael 的 VML 模块以将适当的缩放因子传递给此 z
变量。