2012-12-13 17 views
7

के साथ केंद्र के आसपास स्केल एसवीजी स्केल एसवीजी काम करता है कि मुझे अच्छी तरह से समझने में समस्या हो सकती है। मैं ऐसी है कि के रूप में एक जावास्क्रिप्ट समारोह है कि एक svg ग्राफिक मापता है:सादा जावास्क्रिप्ट

var g = document.getElementById("graph"); 
var nm = g.getCTM().multiply(k); //k is the scale factor 
g.setAttribute("transform", "matrix(" + nm.a + "," + nm.b + "," + nm.c + "," + nm.d + "," + nm.e + "," + nm.f + ")"); 

मुद्दा यह है कि केंद्र स्केलिंग के बाद थोड़ा अनुवाद किया है तो ग्राफिक खो देता है "भौगोलिक" केंद्र है। मैं कैसे निर्धारित कर सकता हूं कि ग्राफ़िक को अपने आस-पास के ग्राफ़िक को स्केल करने के लिए मुझे किस अनुवाद की आवश्यकता है?

धन्यवाद।

उत्तर

3

क्या आपने अन्य दृष्टिकोण माना है?

तुम सिर्फ जूम एक svg पर बाहर /, यह इसे दूसरे तरीके से करने के लिए, आसान हो सकता है में की तलाश में हैं जैसे: http://www.cyberz.org/blog/2009/12/08/svgpan-a-javascript-svg-panzoomdrag-library/

मैंने कुछ समय पहले एक ही समस्या थी और उपयोग करके मेरा अपना जूम बना दी यह: https://github.com/rstacruz/jquery.transit

आप मूल रूप से एक एसवीजी रैपर के लिए सीएसएस ट्रांसफॉर्म स्केल का उपयोग करते हैं और एसवीजी अच्छी तरह से समायोजित करता है। आप ज़ूमिंग को भी एनिमेट कर सकते हैं।

+1

इसके लिए धन्यवाद! पहले jquery.transit के बारे में नहीं सुना है। मैं पहले से ही एसवीजीपीएन का उपयोग कर रहा हूं क्योंकि विभिन्न तरीकों से काफी अच्छा है और कई अन्य जटिल उपयोगिताएं मिलीं जिन्हें अभी छोड़ना पड़ा। मैंने एसवीजीपीएन में अनुवाद (पीएक्स, पीई)। स्केल (जेड)। ट्रांसस्लेट (-पीएक्स, -पी) से स्केल (जेड) में डिफ़ॉल्ट कोड बदल दिया क्योंकि यह कम से कम मेरे मामले में बेहतर काम करता है, लेकिन इसके साथ भी 100% सही नहीं है। वैसे भी मैं अपने प्रश्न का उत्तर दे रहा हूं क्योंकि मुझे स्केल करने का एक तरीका मिला है जो मुझे और अधिक विश्वास दिलाता है। चीयर्स। – kandan

3

के रूप में मुझे लगता है कि बेहतर मेरा उद्देश्य फिट बैठता है और कितने उपयोगी लिंक

http://commons.oreilly.com/wiki/index.php/SVG_Essentials/Transforming_the_Coordinate_System#The_scale_Transformation

में यह करने के लिए पढ़ने के बाद

मैं यह ग्राफिक माउस की स्थिति आसपास पैमाने पर करने के लिए जब अपने पहिया स्क्रॉल किया है बदल दिया है,

यदि यह मदद करता है इस कोड है (का उपयोग कर SVGPan के setCTM विधि):

var svgRoot = document.getElementsByTagName("svg")[0]; 
var g = svgRoot.getElementById("viewport"); 

var newp = svgRoot.createSVGPoint(); 
newp.x = evt.clientX; 
newp.y = evt.clientY; 
newp = newp.matrixTransform(g.getScreenCTM().inverse()); 

var oldx = newp.x; 
var oldy = newp.y; 

//z = scale factor 
setCTM(g, g.getCTM().translate(-(oldx*(z-1)),-(oldy*(z-1))).scale(z)); 
संबंधित मुद्दे