javascript - उनल - मैं कैसे जांच सकता हूं कि Google मानचित्र पूरी तरह से लोड हो गया है या नहीं?




मैप सर्च (6)

मैं अपनी वेबसाइट पर Google मानचित्र एम्बेड कर रहा हूं। एक बार Google मानचित्र लोड होने के बाद, मुझे कुछ जावास्क्रिप्ट प्रक्रियाओं को बंद करने की आवश्यकता है।

Google मानचित्र पूरी तरह से लोड होने पर ऑटो-डिटेक्ट करने का कोई तरीका है, जिसमें टाइल डाउनलोड और सभी शामिल हैं?

एक tilesloaded() विधि मौजूद है कि वास्तव में यह कार्य पूरा करने के लिए माना जाता है लेकिन यह काम नहीं करता है



आप GMap2.isLoaded() विधि को प्रत्येक n मिलीसेकंड्स को देख सकते हैं कि मानचित्र और उसके सभी टाइल्स लोड किए गए थे ( window.setTimeout() या window.setInterval() आपके मित्र हैं)।

हालांकि यह आपको लोड पूर्ण होने की सटीक घटना नहीं देगा, यह आपके जावास्क्रिप्ट को ट्रिगर करने के लिए पर्याप्त होना चाहिए।


मेरे मामले में, रिमोट यूआरएल से लोड टाइल छवि और छवि प्रस्तुत करने से पहले tilesloaded ईवेंट ट्रिगर किया गया था।

मैंने निम्नलिखित गंदे तरीके से हल किया।

var tileCount = 0;
var options = {
    getTileUrl: function(coord, zoom) {
        tileCount++;
        return "http://posnic.com/tiles/?param"+coord;
    },
    tileSize: new google.maps.Size(256, 256),
    opacity: 0.5,
    isPng: true
};
var MT = new google.maps.ImageMapType(options);
map.overlayMapTypes.setAt(0, MT);
google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
    var checkExist = setInterval(function() {
        if ($('#map_canvas > div > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div > div').length === tileCount) {
            callyourmethod();
            clearInterval(checkExist);
        }
    }, 100); // check every 100ms
});

मैं एचटीएमएल 5 मोबाइल ऐप बना रहा हूं और मैंने देखा है कि जब मैप ऑब्जेक्ट बनाया जाता है और प्रस्तुत किया जाता है (भले ही यह दिखाई नहीं दे रहा हो) idle , bounds_changed और tilesloaded ईवेंट आग लगती है।

अपना नक्शा रन कोड बनाने के लिए पहली बार दिखाए जाने पर मैंने निम्न कार्य किया:

google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
    //this part runs when the mapobject is created and rendered
    google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
        //this part runs when the mapobject shown for the first time
    });
});

यदि आप मैप्स एपीआई v3 का उपयोग कर रहे हैं, तो यह बदल गया है।

संस्करण 3 में, आप अनिवार्य रूप से bounds_changed ईवेंट के लिए श्रोता सेट अप करना चाहते हैं, जो मानचित्र लोड पर ट्रिगर करेगा। एक बार यह ट्रिगर हो जाने पर, श्रोता को हटा दें क्योंकि जब भी व्यूपोर्ट सीमा बदलती है तो आप सूचित नहीं होना चाहते हैं।

यह भविष्य में बदल सकता है क्योंकि वी 3 एपीआई विकसित हो रहा है :-)


यह मुझे जीमैप्स वी 3 के साथ थोड़ी देर के लिए परेशान कर रहा था।

मुझे ऐसा करने का एक तरीका मिला:

google.maps.event.addListenerOnce(map, 'idle', function(){
    // do something only the first time the map is loaded
});

जब नक्शा निष्क्रिय राज्य में जाता है तो "निष्क्रिय" ईवेंट ट्रिगर होता है - सबकुछ लोड होता है (या लोड करने में विफल रहता है)। मैंने इसे और अधिक भरोसेमंद पाया, फिर tilesloaded / bounds_changed और addListenerOnce विधि का उपयोग करके addListenerOnce करने में कोड पहली बार निष्पादित किया जाता है "निष्क्रिय" निकाल दिया जाता है और फिर ईवेंट अलग हो जाता है।

Google मानचित्र संदर्भ में ईवेंट अनुभाग भी देखें।






google-maps