Raphael.js函数getBBox在IE8中返回NAN / NAN / NAN

时间:2015-10-22 08:55:25

标签: javascript internet-explorer-8 raphael

使用Raphaël2.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, 例如,textBox.height是NaN。

我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:2)

我找到了this answer to the question "Raphael JS and Text positioning"

的解决方案

如果我使用_getBBox()代替getBBox(),那么一切正常,即8。

  

_getBBox()是未记录的,但是由Raphael本身在内部使用,它可以工作!

答案 1 :(得分:0)

我在Rapahel 2.2.0和2.2.1中遇到了同样的问题,使用._getBBox()并没有为我修复它。

如果已定义并定期.auxGetBBox()无法正常工作,那么为我解决的问题是回归到.getBBox(),如下所示:

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中完成工作,但这是一个单独的问题)。修复 将涉及深入研究Raphael的VML模块,以便将适当的缩放因子输入到此z变量中。