Javascript RaphaelJS 2.1与1.5.2 getBBox错误

Javascript RaphaelJS 2.1与1.5.2 getBBox错误,javascript,raphael,Javascript,Raphael,我正在尝试创建一个类似于的可拖动图形(适用于1.5.2和2.1),但我希望在框中包含文本 我在另一个问题中使用建议添加了文本: 此解决方案在RaphaelJS 1.5.2中非常有效,但在RaphaelJS 2.1中出现了中断 jsFiddle示例: 我发现的唯一区别是Element.getBBox()返回一个非常不同的结果 示例: 在1.5.2中: 在2.1中: 我是否遗漏了从v1.5到v2的更改,或者这个奇怪的BBox是一个bug?有没有办法解决这个问题 谢谢 看来有人试图用Raphael中的

我正在尝试创建一个类似于的可拖动图形(适用于1.5.2和2.1),但我希望在框中包含文本

我在另一个问题中使用建议添加了文本:

此解决方案在RaphaelJS 1.5.2中非常有效,但在RaphaelJS 2.1中出现了中断

jsFiddle示例:

我发现的唯一区别是
Element.getBBox()
返回一个非常不同的结果

示例:

在1.5.2中:

在2.1中:

我是否遗漏了从v1.5到v2的更改,或者这个奇怪的BBox是一个bug?有没有办法解决这个问题


谢谢

看来有人试图用Raphael中的自定义实现取代原生方法
getBBox
。 这背后的原因可能是本机getBBox方法有一些bug,并且它会返回一些形状的不正确结果。另一个原因可能是浏览器的可移植性,我不确定VML中是否有getBBox方法

然而,从您指出的值来看,这个定制实现似乎有其缺陷。 您可以将Raphael 2.x中的本机getBBox与以下代码一起使用:

var bb1 = obj1.node.getBBox(),
    bb2 = obj2.node.getBBox(),

我对它进行了测试,看起来不错:

Raphael 2 getBBox可能有点问题,但在您的情况下,您的数据是错误的。尝试删除数字周围的“符号”:

好榜样


(请注意,另一个解决方案在VML中被破坏)

如果您将BBox转换结合使用,Raphael确实存在错误。 我找到了一个适合我的方法

raphael.js中的第1300行


安德烈亚斯的答案是正确的

也参考了

如果您需要在内部更改getBBox()函数时多次重复使用它,克隆是正确的修复方法


顺便说一句:感谢Dimitry for Raphael.js,这真是一件了不起的工作!!

我在答案被接受后才来到这里,但我仍然有一些问题。如果你和我一样,你可能想从Raphael.js GitHub上获取最新的开发版本:


Raphael似乎采纳了Andreas的答案(在1972行,而不是在写答案时的1300行)。Raphael的最新开发版本对我有效。

我克隆了bbox!原因:bbox将从Raphael内部重用。在这种情况下,代码的不同部分修改了同一对象。
Object
  height: 500780.9482062537
  width: 1009980
  x: 526.51
  x2: 1010506.51
  y: -399735.94795512746
  y2: 101045.00025112627
var bb1 = obj1.node.getBBox(),
    bb2 = obj2.node.getBBox(),
var pathDimensions = R.pathBBox = function (path) {
    var pth = paths(path);
    if (pth.bbox) {
        return clone(pth.bbox) ; // FREEGROUP FIX!!!!!!
    }
    if (!path) {
        return {x: 0, y: 0, width: 0, height: 0, x2: 0, y2: 0};
    }