2013-08-25 3 views
26

मेरे पास एक काफी परिष्कृत मानचित्र एप्लिकेशन है जो कई कस्टम मार्करों और ऐसे हैंडल करता है। मेरे पास resizeWindow नामक एक फ़ंक्शन है जिसे मैं श्रोता में कॉल करता हूं जब भी स्क्रीन बदल जाती है, नक्शा नई सीमाओं की गणना करके और आकार बदलने के लिए खुद को फिर से चलाता है। यह इस तरह दिखता है:मैं Google मानचित्र API v3.0 के साथ रेड्रो को कैसे बल दूं?

window.onresize = function(event) { fitmap(); }; 

और समारोह आकार बदलने के लिए है:

function fitmap(id) { 
    var coords = []; 
    var newlatlng = new google.maps.LatLng(projlat, projlng); 
    coords.push(newlatlng); 

     for (var i=0; i<markers[id].length; i++) { 
      newlatlng = new google.maps.LatLng(markers[id][i].latitude, markers[id][i].longitude); 
      coords.push(newlatlng); 
     } 
    } 

    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0, LtLgLen = coords.length; i < LtLgLen; i++) { 
     bounds.extend (coords[i]); 
    } 
    map.fitBounds(bounds); 

और इस महान काम करता है जब मैं वास्तव में विंडो का आकार बदलने। लेकिन ...

मेरे पास खिड़की के दाहिने तरफ एक मेनू नीचे जा रहा है। मैं स्क्रीन से उस मेनू को स्थानांतरित करने के लिए jquery.animate का उपयोग करता हूं। मैं फिटमैप फ़ंक्शन को एक चरण प्रक्रिया (या अंत में केवल एक बार) के रूप में कॉल करता हूं और यह मानचित्र को फिर से नहीं हटाएगा।

$('#rightSide').animate({ right:"-240px" }, { 
    duration:1000, 
    step: function(now,fx) { 
     fitmap(); 
    } 
}); 

मैंने पढ़ा है और इस पर पढ़ सकते हैं और ऐसा लगता है गूगल मैप्स एपीआई v3.0 कि redrawing नहीं होगा अगर वास्तव में कुछ भी नहीं बदलता है की कुछ अजीब है कि वहाँ है। इस मामले में, मेरी उपलब्ध विंडो स्क्रीन चौड़ाई से बदलती है - मेनू से वास्तविक पूर्ण स्क्रीन तक। लेकिन कोई redraw होता है।

मैंने google.maps.event.trigger (मानचित्र, 'आकार बदलें') की कोशिश की है; और यह या तो काम नहीं करता है।

क्या Google मानचित्र को फिर से निकालने के लिए मजबूर करने का कोई तरीका है?

+0

क्या आप हमें एक लिंक दे सकते हैं? –

+0

दाहिने तरफ मेनू के ऊपरी बाईं ओर एक छोटा सा टैब है। –

+0

इसके अलावा, यदि आपके पास अपनी ब्राउज़र विंडो आकार में सेट है, तो यह परिवर्तन ज़ूम परिवर्तन को मजबूर करता है, फिर यह काम करता है। यह तब होता है जब कोई ज़ूम परिवर्तन आवश्यक नहीं है कि यह समायोजित नहीं होगा। मैंने 1-चरणीय ज़ूम आउट करने और ज़ूम इन करने की भी कोशिश की लेकिन उसने इसे ठीक नहीं किया। –

उत्तर

59

google.maps.event.trigger(MapInstance,'resize') मेरे लिए ठीक काम कर रहा है, इसे fitMap फ़ंक्शन की शुरुआत में रखें।

आप क्या याद कर रहे हैं:

वर्तमान में (नहीं कोड अपने लिव-कोड में, इसके बाद के संस्करण तैनात में), तो आपको resizeWindow प्रत्येक step पर कॉल करें।

जब आप इस फ़ंक्शन को step पर कॉल करते हैं तो को से पहले फ़ंक्शन को वर्तमान चरण के लिए एनीमेशन समाप्त होने से पहले कहा जाएगा। नतीजा यह है कि पूर्ण एनीमेशन समाप्त होने पर resizeWindow नहीं कहा जाएगा, उदाहरण के लिए मानचित्र के दाहिने तरफ एक मार्जिन।

समाधान: resizeWindow पर भी complete पर animation की कॉलबैक पर कॉल करें।

+0

आह। धन्यवाद! मैं भूल गया था कि मैंने परीक्षण पर उस कोड की कौन सी प्रतिलिपि बनाई है। मैं सभी तरीकों से कोशिश कर रहा था। लेकिन मुझे नहीं पता था कि कदम से पहले चरण समारोह को बुलाया गया था। –

संबंधित मुद्दे