放大和缩小,但保持svg居中

问题描述 投票:1回答:1

我有一个svg格式的世界地图,我正在使用一个视图框来关注非洲。我有两个用于放大和缩小的按钮:

<rect class="button" x="75" y="170" onclick="zoom(0.8)" style="width:25px; height:20px; fill:khaki"/>
<rect class="button" x="100" y="170" onclick="zoom(1.25)" style="width:25px; height:20px; fill:khaki"/>

在外部.js文件中,我有代码可以进行平移和缩放,我在Peter Collingridge的在线教程中找到了:

var transformMatrix = [1, 0, 0, 1, 0, 0];
var svg = document.getElementById('map-svg');
var viewbox = svg.getAttributeNS(null, "viewBox").split(" ");
var centerX = parseFloat(viewbox[2]) / 2;
var centerY = parseFloat(viewbox[3]) / 2;
var matrixGroup = svg.getElementById("matrix-group");

function pan(dx, dy) {
    transformMatrix[4] += dx;
    transformMatrix[5] += dy;
    var newMatrix = "matrix(" +  transformMatrix.join(' ') + ")";
    matrixGroup.setAttributeNS(null, "transform", newMatrix);
}

function zoom(scale) {
    for (var i = 0; i < transformMatrix.length; i++) {
transformMatrix[i] *= scale;
}

    transformMatrix[4] += (1 - scale) * centerX;
    transformMatrix[5] += (1 - scale) * centerY;

    var newMatrix = "matrix(" +  transformMatrix.join(' ') + ")";
    matrixGroup.setAttributeNS(null, "transform", newMatrix);
}

除了一件事,一切都按照我的要求运作。当我放大时,非洲“跳”到右边,当我缩小时,它“跳”到左边。我如何放大和缩小,非洲停留在视图框的中心?

javascript svg zoom
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.