使用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。
我怎么能解决这个问题?
答案 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
变量中。