سؤال

أنا أستخدم Google Maps API V3 على موقع ويب أقوم بتطويره. لدي مربع منسد أسفل خريطتي والذي يسمح للمستخدم بالتبديل بين مجموعات مختلفة من العلامات التي سيتم عرضها على الخريطة. يتم عرض كل علامة باستخدام marker.setMap().

مشكلتي هي أن الخريطة تستغرق أحيانًا وقتًا طويلاً لعرض العلامات الجديدة ، وخاصة في IE. أرغب في إظهار الرسوم المتحركة "تحميل" أثناء تبديل الخريطة. لكنني لا أعرف كيفية اكتشاف متى تنتهي الخريطة من عرض البيانات الجديدة (لا يوجد تحميل صفحة ، لأن هذا كله هو Ajax). هل هناك رد اتصال أو مستمع حدث لـ setMap() الحدث ، حتى أتمكن من استدعاء وظيفة لإيقاف الرسوم المتحركة "تحميل" عندما تنتهي العلامة الأخيرة من التحميل؟

هل كانت مفيدة؟

المحلول

لا يبدو أن هناك رد اتصال أو مستمع حدث لـ SetMap () ، لكنني اكتشفت طريقة لإنجاز ما أردت. أقوم بتحميل خريطة Google باستخدام jQuery. ها هو الكود الخاص بي.

عند تهيئة الخريطة ، قمت بإعداد مستمع لحدث "الخمول" ، الذي يخفي الرسوم المتحركة "تحميل". يتم تشغيل حدث "الخمول" عندما تنتهي الخريطة من إعادة رسمها بعد تغيير التمرير أو التكبير:

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

وفي وظيفتي لمسح التراكبات ، أعرض أولاً الرسوم المتحركة للتحميل ، ثم قم بمسح كل علامة باستخدام setMap (NULL). ثم أنا حديثًا جدًا الخريطة عن طريق تغيير خط الطول بمقدار .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);
}

إنه جزء من الاختراق ، لكنني آمل أن يجد شخص آخر هذا مفيدًا.

نصائح أخرى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top