Tema: Zoom con svg
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/11/2009, 13:42
Avatar de Covids0020
Covids0020
 
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 6 meses
Puntos: 1
Respuesta: Zoom con svg

A continuación de dejo uno de los métodos de su librería para navegación y que a mí más me ha servido. Te recomiendo que destripes y leas detenidamente su sección sobre herramientas de navegación para mapas:

Código:
mapApp.prototype.calcCoord = function(evt,ctmNode) {
	var svgPoint = document.documentElement.createSVGPoint();
	svgPoint.x = evt.clientX;
	svgPoint.y = evt.clientY;
	if (!document.documentElement.getScreenCTM) {
		//undo the effect of transformations
		if (ctmNode) {
			var matrix = getTransformToRootElement(ctmNode);
		}
		else {
			var matrix = getTransformToRootElement(evt.target);			
		}
  		svgPoint = svgPoint.matrixTransform(matrix.inverse().multiply(this.m));
	}
	else {
		//case getScreenCTM is available
		if (ctmNode) {
			var matrix = ctmNode.getScreenCTM();
		}
		else {
			var matrix = evt.target.getScreenCTM();		
		}
  	svgPoint = svgPoint.matrixTransform(matrix.inverse());
	}
  //undo the effect of viewBox and zoomin/scroll
	return svgPoint;
}
La función getTransformToRootElement() va en otro archivo de funciones extras pero si usas Firefox por ejemplo no es necesario ya que admite los métodos DOM sobre la matriz, getCTM, getCurrentTranslation, Scale... etc.

También te recomiendo usarla con alguna otra librería, digamos de bajo nivel, como Prototype ya que te permitirá usar eventos, listeners, peticiones AJAX, etc, con compatibilidad de navegadores ;)
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org