如何动态扩展svg

时间:2013-12-11 16:45:56

标签: javascript html css svg

我对svg不熟悉。我有svg显示地图,地图是使用路径形成的。

现在在我的应用程序中,用户将提交地图的高度和宽度,所以我想将地图重新​​调整为相同的宽度和高度我应该如何缩放svg?

这是我的基本svg代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="721" height="650" viewBox="0 0 721 650" preserveAspectRatio="none" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <g id="US" transform="translate(528,270)">

            <a id="s01">
                <path d="M158.95067408594068,46.88327098850149L185.03303599629845,44.0148159910488L189.74121811302572,59.50889743727097L196.59587401503094,82.27898337817625L199.0518321008348,87.17077847298319L201.13017099189912,89.85649424407167L200.707578706067,91.7588142001174L202.6261541288344,92.6205139503571L200.33524838576966,95.29216920133321L200.7363444144292,97.59217497211156L199.80999341478454,100.8918397716738L202.09021078470892,106.20782432993735L201.64399529140977,111.17790897235179L204.03767592952832,115.96122130827978L196.3574723373462,117.09985438789514L163.47293491613115,121.08122011183377L163.22294648718562,123.55296427740802L167.13791879442175,126.6835133291724L166.871741037497,129.76735843938286L168.2485001228969,131.1400084527912L166.21795234496457,134.1137855808483L164.12121282499038,134.9547500732084L159.81791064191435,132.36796011584426L158.90469329765804,127.88713803963412L157.64560372254968,127.51168600895127L156.5390262005875,131.08669596034315L156.36678872306632,134.46030822963786L152.20800610122825,133.97284127048096L148.16895577705603,105.98121856614907L148.12136132417422,70.56398790998259L148.15893441899317,50.102043132249676L146.40831263672231,48.33943105796875Z" stroke="#FFFFFF" stroke-dasharray="1, 0" stroke-width="1.5"/>
                <text x="162.66165594858754" y="86.92631614090374" style="">AL</text>
                <title/>
            </a> 

3 个答案:

答案 0 :(得分:0)

使用<g id="US"><g>包裹在另一个transform="scale(0.1)"中(例如缩放到1/10大小)

然后,您可以动态修改此新<g>的比例值

答案 1 :(得分:0)

您可以使用viewBox缩放SVG。此属性接受4个参数,用空格分隔,以描述SVG内的新坐标系。

将viewBox设置为原点坐标系,按照您希望的方式设置SVG new的宽度和高度。

var svg = document.querySelector('svg');

var svgWidth = parseFloat(svg.getAttributeNS(null, "width"));
var svgHeight = parseFloat(svg.getAttributeNS(null, "height"));

function scaleSVG(percent)
{
    svg.setAttributeNS(null, "width", svgWidth * percent);
    svg.setAttributeNS(null, "height", svgHeight * percent);
    svg.setAttributeNS(null, "viewBox", "0 0 " + svgWidth + " " + svgHeight);

}

scaleSVG(2);

演示 https://codepen.io/martinwantke/pen/LQpPyB

答案 2 :(得分:-1)

尝试这样的事情,但要有自己的规模。

    }
function SVGscale(scale) {
    window.SVGsetDimension(640*scale,480*scale);
    window.SVGsetScale(scale,scale);    
        if (!W3CDOM) return;
    var box     = document.getElementById('svgid');
    box.width   = 640*scale;
    box.height  = 480*scale;

希望这有帮助