说你有Raphael set1,包含: - 一个矩形(r1) - 一组rects(set2) - 空集(set3)。
在Raphael中,element.getBBox()适用于set2。但是对于set1,它将返回NaN(对于x2,y2,宽度和高度 - 但不是x和y,它可以正常工作)。但是set1确实有宽度和高度,因为它还包含r1和set2。
set3.getBBox()。y2将返回-Infinity。
我编写了一个小函数,可以帮助我获得包含空集的集合的“真实”getBBox(),但它非常复杂。我确信有更直接的方法可以解决这个问题,但我不太了解js。此外,我的代码可能存在一些问题,我还没有看到。有任何想法吗?谢谢!
function newBBox(e){
function clean(s){
for (var i=s.length-1; i>=0; i--){
if (isNaN(s[i].getBBox().y2)) s[i] = clean(s[i])
else if (s[i].getBBox().y2 == -Infinity) s.exclude(s[i]);
};
return s;
}
if (!isNaN(e.getBBox().y2)) return e.getBBox();
// if not ok, e must be a set that at some point contains an empty set. Lets find it, exclude it and return the getBBox for the new set
return clean(e.clone()).getBBox(); // can´t use e because its a pointer to the original set and we'll be excluding things from the set
}