2011-12-19 13 views
31

मेरे पास जावास्क्रिप्ट एपीआई वी 3 के साथ एक Google मानचित्र सेट है। यह गतिशील चौड़ाई वाले एक div में प्रदर्शित होता है, क्योंकि जब हम मार्कर पर क्लिक करते हैं तो सामग्री फलक स्लाइड हो जाती है।कंटेनर के बाद हाल ही में एक Google मानचित्र चौड़ाई बदल गया

सबकुछ ठीक काम करता है, लेकिन एक बात: जब फलक स्लाइड हो जाती है, तो नक्शा की चौड़ाई बदल जाती है, और इसलिए केंद्र दाईं ओर विस्थापित होता है (फलक बाईं ओर होता है)। यह वास्तव में छोटे संकल्पों के लिए वास्तव में असुविधाजनक है, जहां आप फलक खुला होने के बाद भी केंद्र नहीं देख सकते हैं।

मैंने 'आकार बदलने' ट्रिगर की कोशिश की है, लेकिन यह काम नहीं लग रहा है ... कोई विचार?

बहुत बहुत धन्यवाद!

उत्तर

82

resize पर कॉल करके स्वयं आपको जो चाहिए उसे प्राप्त नहीं करेगा।

आप क्या करने की जरूरत पहले है (पहले एक आकार बदलने होता है) मानचित्र

var currCenter = map.getCenter(); 

तो फिर तुम जैसे निम्नलिखित, अपने div आकार दिया जाता है के बाद कुछ करने की जरूरत है की वर्तमान केंद्र मिलता है।

google.maps.event.trigger(map, 'resize'); 
map.setCenter(currCenter); 

चाल

+0

मैं कोशिश करूँगा और आपसे वापस आऊंगा, चीयर्स! :) – Charleshaa

+1

कोशिश की, लेकिन यह कुछ भी नहीं करता है :(... कोई त्रुटि नहीं मिली है। – Charleshaa

+0

क्या वास्तव में काम नहीं करता है? क्या आप कुछ कोड पोस्ट कर सकते हैं ताकि हम बेहतर सहायता कर सकें। – omarello

7

omarello काम करता है चाहिए लेकिन मैं इसे वोट दें नहीं कर सकता। आप संभवतः उस var को संदर्भित करना भूल गए हैं जो आपके केंद्र निर्देशांक को परिभाषित करता है। सभी "आकार बदलें" divs वर्तमान चौड़ाई और ऊंचाई खींचता है, यह मानचित्र के बारे में कुछ भी नहीं बदलता है - अभी तक!

var center = new google.maps.LatLng(39.5, -98.3); 

$(document).ready(function() { 
    $("#fullsize").click(function(e) { 
     e.preventDefault(); 
     $("#map_canvas").css({ 
      width: '1000px'}); 
     google.maps.event.trigger(map, "resize"); 
     map.setCenter(center); 
     }); 
    }); 
16

पहले वर्तमान केंद्र के लिए एक चर सेट करें, फिर आकार बदलने के लिए एक ईवेंट श्रोता का उपयोग करें, और इस प्रकार केंद्र सेट करें।

//Get current center 
var getCen = map.getCenter(); 

//Use event listener for resize on window 
google.maps.event.addDomListener(window, 'resize', function() { 
    //Set Center 
    map.setCenter(getCen); 
}); 
+1

अच्छा जवाब है, तो सामग्री लगातार नक्शे के एक निश्चित क्षेत्र में, और अधिक उत्तरदायी डिजाइन के लिए जहाँ भी नक्शा न्यूयॉर्क से पेरिस के लिए केंद्रित है के मामले में रहता है, इसके बाद के संस्करण जवाब बेहतर काम करता है (यानी: वर्तमान केंद्र प्राप्त करें, फिर आकार बदलने के बाद, पिछले केंद्र में हालिया नक्शा) – efwjames

+0

@ स्पष्ट सुझाव –

+0

को प्रतिबिंबित करने के लिए अद्यतन कोड> यह> नक्शा जावास्क्रिप्ट एपीआई v3 के साथ काम करता है –

2

Hy इस कोशिश;)

नक्शा प्रारंभ

var currentMapCenter = null; 
google.maps.event.addListener(map, 'resize', function() { 
    currentMapCenter = map.getCenter(); 
}); 

google.maps.event.addListener(map, 'bounds_changed', function() { 
    if (currentMapCenter) { 
    // react here 
     map.setCenter(currentMapCenter); 
    } 
    currentMapCenter = null; 
}); 

इस के बाद पर सिर्फ फोन जब tou नक्शा आकार चाहते हैं।

google.maps.event.trigger(map, 'resize'); 
संबंधित मुद्दे