2012-09-12 56 views
4

我有一些Raphael/SVG项目可能会超出边界。我想要的是能够自动缩放和居中SVG显示所有内容。缩放Raphael/SVG容器以适合所有内容

我有一个中心它适当的,我只是无法弄清楚如何获得缩放工作

编辑 这现在工作的一些部分的工作代码...但犯规居中对齐,并且需要填充..

var maxValues = { x: 0, y: 0 }; 
var minValues = { x: 0, y: 0 }; 

//Find max and min points 
paper.forEach(function (el) { 
    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; 
}); 

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

console.log(minValues,maxValues,w,h) 

paper.setViewBox(minValues.x, minValues.y, w, h, false); 

回答

1

我使用这段代码来将包含我想要以几乎全屏显示的所有SVG的viewbox居中。

var elmnt = $(viewport); 
var wdif = screen.width - width; 
var hdif = screen.height - height; 
if (wdif < hdif){ 
    var scale = (screen.width - 50)/width; 
var ty = (screen.height - (height * scale))/2 
var tx = 20; 
}else{ 
var scale = (screen.height - 50)/height; 
var tx = (screen.width - (width * scale))/2 
var ty = 20; 
} 
elmnt.setAttribute("transform", "scale("+scale+") translate("+tx+","+ty+")"); 

它的作用是使用视口大小和屏幕大小之间的差异,并将其用作比例。当然,你需要将所有元素包装在一个视图框中。我希望这对你有用。再见!

编辑

从来就使这个小提琴.... http://jsfiddle.net/MakKZ/

虽然在原来的片段从来就使用的屏幕尺寸,用小提琴,你会I'm使用的是看jsfiddle使用的HTML元素的大小。无论您在屏幕上绘制多少个圆圈(或圆圈的大小),您都可以看到它们。

+0

嘿..我不明白我可以如何使用此代码?你能否详细说明或建立一个jsFiddle?欢呼 – Chris

+0

好的!我编辑了我的答案! – limoragni