इससे पहले कि आप सोचें कि "यह आदमी इस समस्या पर मदद क्यों मांग रहा है, निश्चित रूप से यह 1000x लागू किया गया है" - जबकि आप अधिकतर सही हैं, मैंने इस समस्या को कई खुले के साथ हल करने का प्रयास किया है स्रोत libs अभी तक मैं हूँ।एसवीजी माउस पर ज़ूम इन करें - गणितीय मॉडल
मैं एक एसवीजी आधारित "माउस व्हील पर ज़ूम इन, माउस पर ध्यान केंद्रित" को लागू करने का प्रयास कर रहा हूं।
मुझे पता है कि कई पुस्तकालय हैं जो इसे पूरा करते हैं, डी 3 और एसवीजी-पैन-ज़ूम को दो नाम देने के लिए। दुर्भाग्य से, उन libs का उपयोग कर मेरे कार्यान्वयन मेरी उम्मीदों से कम गिर रहे हैं। मैं उम्मीद कर रहा था कि इस प्रकार की यूआई सुविधा के लिए अंतर्निहित गणितीय मॉडल के साथ समुदाय से मुझे कुछ मदद मिल सकती है।
असल में, वांछित व्यवहार Google मानचित्र की तरह है, उपयोगकर्ता का माउस उनके स्थान पर होवर करता है, वे माउस व्हील (अंदरूनी) को स्क्रॉल करते हैं, और नक्शा छवि के पैमाने को बढ़ाता है, जबकि स्थान पर आच्छादित हो जाता है व्यूपोर्ट का क्षैतिज और ऊर्ध्वाधर केंद्र।
स्वाभाविक रूप से, मेरे पास व्यूपोर्ट की चौड़ाई/ऊंचाई और माउस के एक्स/वाई तक पहुंच है।
इस उदाहरण में, मैं सिर्फ एक्स अक्ष पर ध्यान दिया जाएगा, व्यूपोर्ट 900 इकाइयों व्यापक है, वर्ग 100 इकाइयों विस्तृत है, यह एक्स ऑफसेट है 400 इकाइयों है, और बड़े पैमाने 1: 1
<g transform="translate(0 0) scale(1)">
माउस एक्स स्थिति मान लिया जाये पर या 450 इकाइयों के पास थी, अगर में जब तक पैमाने पर पहुंच गया 2 एक उपयोगकर्ता पहियों: 1, मैं करूंगा उम्मीद एक्स -450 इकाइयों तक पहुँचने के लिए ऑफसेट, इसलिए की तरह ध्यान केंद्रित करने की बात केंद्रित ।
<g transform="translate(-450 0) scale(2)">
x और y ऑफसेट वर्तमान पैमाने/माउस ऑफसेट के एक समारोह के रूप में पहिया स्क्रॉल में से प्रत्येक के वेतन वृद्धि पर पुनर्गणना की जरूरत है।
मेरे सभी प्रयास वांछित व्यवहार से पूरी तरह से कम हो गए हैं, किसी भी सलाह की सराहना की जाती है।
जबकि मैं किसी भी मदद की सराहना करता हूं, कृपया सुझावों के साथ तीसरे पक्ष के पुस्तकालयों, jQuery प्लगइन्स और उस प्रकृति की चीजों के जवाब देने से बचें। मेरा उद्देश्य यहां एक सामान्य अर्थ में इस समस्या के पीछे गणितीय मॉडल को समझना है, एसवीजी का मेरा उपयोग मुख्य रूप से चित्रकारी है।
अंत में, बस सुंदर - धन्यवाद – James