13

मैं उस वेबसाइट पर Google मानचित्र API v3 का उपयोग कर रहा हूं जिसे मैं विकसित कर रहा हूं। मेरे पास मेरे मानचित्र के नीचे एक ड्रॉप-डाउन बॉक्स है जो उपयोगकर्ता को मानचित्र पर प्रदर्शित होने के लिए मार्करों के विभिन्न सेटों के बीच स्विच करने की अनुमति देता है। प्रत्येक मार्कर marker.setMap() का उपयोग करके प्रदर्शित किया जाता है।Google मानचित्र API v3: क्या setMap() ईवेंट के लिए कोई कॉलबैक या ईवेंट श्रोता है?

मेरी समस्या यह है कि नक्शा कभी-कभी नए मार्करों को प्रदर्शित करने में काफी समय लगता है, खासकर आईई में। मैप मार्कर स्विच कर रहा है, जबकि मैं एक "लोडिंग" एनीमेशन दिखाना चाहता हूं। लेकिन मुझे नहीं पता कि नक्शा ने नए डेटा को प्रदर्शित करने के दौरान कैसे पता लगाया है (कोई पेज लोड नहीं है, क्योंकि यह सब AJAX है)। क्या एक setMap() ईवेंट के लिए कोई कॉलबैक या ईवेंट श्रोता है, इसलिए आखिरी मार्कर लोड होने पर "लोडिंग" एनीमेशन को रोकने के लिए मैं फ़ंक्शन को कॉल कर सकता हूं?

उत्तर

21

सेटमैप() के लिए कॉलबैक या ईवेंट श्रोता प्रतीत नहीं होता है, लेकिन मुझे जो चाहिए था उसे पूरा करने का एक तरीका पता चला। मैं jQuery का उपयोग कर Google मानचित्र लोड कर रहा हूं। मेरा कोड यहाँ है।

मानचित्र प्रारंभ करते समय, मैंने 'निष्क्रिय' ईवेंट के लिए श्रोता स्थापित किया, जो "लोडिंग" एनीमेशन को छुपाता है। जब भी नक्शा एक स्क्रॉल या ज़ूम परिवर्तन के बाद redrawing समाप्त हो गया है 'निष्क्रिय' घटना शुरू हो रहा है:

google.maps.event.addListener(this.map, 'idle', function() { 
$('#loading').hide(); 
}); 

और ओवरले स्पष्ट करने के लिए मेरी समारोह में, मैं पहली बार लोड हो रहा है एनीमेशन दिखाने के लिए, तो setMap का उपयोग कर प्रत्येक मार्कर स्पष्ट (शून्य)। तो मैं .000000001 द्वारा देशांतर को बदलकर मानचित्र को बहुत हाल ही में मानचित्रित करता हूं। यह सभी setMap() कॉल के बाद होता है, और 'निष्क्रिय' ईवेंट ट्रिगर करता है जो लोडिंग एनीमेशन को छुपाता है।

// clear overlays from the map 
function clearOverlays() { 
$('#loading').show(); 

// clear the markers from the active data array 
if (activeData) { 
    for (i in activeData) { activeData[i].setMap(null); } 
} 
activeData = ''; 

// very slightly recenter the map to trigger the 'idle' event 
var centerlat = MYMAP.map.getCenter().lat(); 
var centerlng = MYMAP.map.getCenter().lng() + .000000001; 
recenter = new google.maps.LatLng(centerlat, centerlng); 
MYMAP.map.setCenter(recenter); 
} 

यह एक हैक का थोड़ा सा है, लेकिन मुझे आशा है कि किसी और को यह उपयोगी लगेगा।

+2

हाँ मैं इस उपयोगी –

+1

पाया मैं प्राप्त करने के लिए similir बात करने की कोशिश की। मैं "निष्क्रिय" स्टार्ट पर प्रीलोडर बना देता हूं, फिर मार्कर क्लस्टरर्स प्रस्तुत करता हूं और जब सभी क्लस्टर और मार्कर मैप करने के लिए सेट होते हैं, तो मैं प्रीलोडर छुपाता हूं। लेकिन यह उम्मीद के रूप में काम नहीं किया। प्रीलोडर नहीं दिखाया गया था (डोम हां में, लेकिन immidiatelly गायब हो गया, सीएसएस उस पर applaied नहीं)। आपके हैक ने मेरा दिन बचाया। – exoslav

0

हो सकता है कि यह मदद मिलेगी: http://www.basicslabs.com/Projects/progressBar/#Examples

और उदाहरण: http://www.basicslabs.com/Projects/progressBar/example/progressBar.html

+0

धन्यवाद - मैंने इसे देखा, और यह उपयोगी लग रहा है, लेकिन मैं इसे अपने कोड को पर्याप्त रूप से बदलने के बिना ठीक से काम नहीं कर सका, और अब मेरे पास समाधान मेरे लिए काम कर रहा है। – shipshape

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