使用Raphael.setViewBox zoom / pan来显示set / paper的全部内容

时间:2012-09-17 13:52:50

标签: javascript svg raphael

我的目标是在论文的中心创建一些代码,这些代码将显示尽可能大的一组对象(无需动画)。

我当前的尝试获取一组对象或纸张的边界框并返回尺寸,然后由setViewBox使用。不幸的是它只是不起作用,我不明白为什么。

这是我的代码

function GetContainingViewBoxFor(object)
{
var maxValues =  { x: 0, y: 0 };
var minValues =  { x: 0, y: 0 };

//Find max and min points
object.forEach(function (el) {
    if (el.data("background")) return;

    var bbox = el.getBBox();

    if (bbox.y < minValues.y) minValues.y = bbox.y;
    if (bbox.y2 < minValues.y) minValues.y = bbox.y2;

    if (bbox.y > maxValues.y) maxValues.y = bbox.y;
    if (bbox.y2 > maxValues.y) maxValues.y = bbox.y2;

    if (bbox.x < minValues.x) minValues.x = bbox.x;
    if (bbox.x2 < minValues.x) minValues.x = bbox.x2;

    if (bbox.x > maxValues.x) maxValues.x = bbox.x;
    if (bbox.x2 > maxValues.x) maxValues.x = bbox.x2;
});

//Padding
var padding = 50;
maxValues.x += padding;
minValues.x -= padding;
maxValues.y += padding;
minValues.y -= padding;

var w = maxValues.x - minValues.x;
var h = maxValues.y - minValues.y;

var cviewBox = {X:minValues.x - paper.width,Y:minValues.y,width:w,height:h};
return cviewBox;
}

它的用法如下:

var containingViewBox = GetContainingViewBoxFor(paper);

paper.setViewBox(containingViewBox.X, containingViewBox.Y, containingViewBox.width, containingViewBox.height, false);

0 个答案:

没有答案