【问题标题】:Scale Raphael / SVG container to fit all contents缩放 Raphael / SVG 容器以适应所有内容
【发布时间】:2012-09-12 11:25:56
【问题描述】:

我有许多可能超出边界的 Raphael / SVG 项目。我想要的是能够自动缩放和居中 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);

【问题讨论】:

    标签: javascript svg raphael


    【解决方案1】:

    我正在使用这个 sn-p 代码将包含我想要以几乎全屏显示的所有 SVG 的视图框居中。

    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/

    虽然在原始 sn-p 中我使用了屏幕大小,但在小提琴中,您将看到我使用的是 jsfiddle 使用的 HTML 元素的大小。无论您在屏幕上绘制了多少个圆圈(或圆圈的大小),您始终都能看到它们。

    【讨论】:

    • 嘿.. 我不明白如何使用此代码?您能否详细说明或设置一个 jsFiddle?干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2015-04-28
    • 2020-10-21
    • 1970-01-01
    • 2011-01-20
    • 2010-12-03
    相关资源
    最近更新 更多