micha: svg zoom-skalierung

Beitrag lesen

hallo,

ich will in einem SVG-frameset den zoom auf den mittelpunkt des aktuellen fensterausschnittes bringen. durch klicken auf einen link in einem fremden frameset. da ich keine website habe hier kurz das skript:

// button ZoomIn
var theSVGDoc;
var theActualTransX;
var theActualTransY;
var clientX;
var clientY;
var transX = 0;
var transY = 0;

function Init2(evt){
    //theSVGDoc = evt.target();
    var theSVGMap = top.window.frames.item("mainFrame").document.karte.getSVGDocument();
    var theSVGDoc = theSVGMap.getDocumentElement();

// weitergehend
    var viewbox = new String(theSVGDoc.getAttribute("viewBox"));
    var viewboxes = viewbox.split(' ');
    var ulXCorner = viewboxes[0];
    var ulYCorner = viewboxes[1];
    var width = viewboxes[2] - ulXCorner;
    var height = viewboxes[3] - ulYCorner;
    var pixWidth = theSVGDoc.getAttribute('width');
    var pixHeight = theSVGDoc.getAttribute('height');
    //bildschirmauflösung
    clientX = 1280;
    clientY = 1024;
    }

function action_ZoomIn() {

// massstab ermitteln, berechnen und setzen
    var theSVGMap = top.window.frames.item("mainFrame").document.karte.getSVGDocument();
    var theSVGDoc = theSVGMap.getDocumentElement();
    var theActualScale = theSVGDoc.getCurrentScale();
    var ZIELScale = theActualScale * 2;
    theSVGDoc.currentScale=ZIELScale;

// translation ermitteln, berechnen und setzen
    var theActualTrans = theSVGDoc.getCurrentTranslate();
    theActualTransX = theActualTrans.getX();
    theActualTransY = theActualTrans.getY();
    alert(theActualTransX + ' ' + theActualTransY);

transX += (-clientX + theActualTransX) / (4 * theActualScale);
    transY += (-clientY + theActualTransY) / (4 * theActualScale);
    transString = 'translate('+transX+','+transY+')';

theSVGDoc.currentTranslate.x = transX;
    theSVGDoc.currentTranslate.y = transY;

//test mit group
    //group = theSVGDoc.getElementById('theWholeMap');
    //group.setAttribute('transform',transString);
}

init2 wird mit laden des mainframes aufgerufen. die funktion action_ZoomIn() nach klicken des links. in der svg-datei, die gezoomt werden soll steht im svg-element:
<svg width="100%" height="100%" viewBox="4512000 -5735000 180000 180000" id="saxony">.

dieser string soll nicht geändert werden.

das hereinzoomen funktioniert einfach aber der verschiebevektor läßt sich einfach nicht festlegen. mir ist auch noch nicht so recht klar, wie ich die aktuelle auflösung der grafik bestimme und was die negativen rückgabewerte beim abrufen der translation bedeuten.

ziel ist es immer in die mitte des aktuellen bildes positiv zu zoomen.

vielleicht hat ja einer von euch das problem gelöst.

micha