Більше

Як затримати очікування завантаження карти

Як затримати очікування завантаження карти


Який код я можу використати, щоб зачекати, поки програма завантажить карту першою після команди zoomIn?

Ось частина мого коду.

for (var z = zoomfrom; z <= zoomto; z ++) {var scale = MapPanel.map.getScale (); var zoomlevel = MapPanel.map.getZoom (); NewZoomLevel = getzoomlevel (масштаб); lat1 = lat2tile (coords.top, NewZoomLevel); lat2 = lat2tile (coords.bottom, NewZoomLevel); long1 = long2tile (coords.left, NewZoomLevel); long2 = long2tile (coords.right, NewZoomLevel); for (var x = lat1; x <= lat2; x ++) {for (var y = long1; y <= long2; y ++) {list = list + startlink + zoomlevel + '/' + x + '/' + y + '
'; } // y для} // x для MapPanel.map.zoomIn (); // ця частина сподівається поставити код для очікування завантаження карти після zoomIn}; // z для

Я спробував використовувати відкладену функцію extjs, але безрезультатно.


Через асинхронну природу JavaScript ви не можете "затримувати" виконання коду, щоб дочекатися певної події, вам потрібно використовувати зворотні виклики завершення.OpenLayers.Mapмає цілий ряд подій, які ви можете прослухати, потрібна вамзооменд:

зооменд спрацьовує після завершення масштабування

Ось простий приклад на основі вашого коду:

var map = MapPanel.map; map.events.register ('zoomend', map, function () {console.log ('Масштабування завершено!');}); console.log ('Про збільшення масштабу'); map.zoomIn (); console.log ('Збільшення розпочато');

Ви можете протестувати його безпосередньо у своєму браузері, вставивши наведений вище код (без першого рядка) в консоль JavaScript на http://openlayers.org/. Вихідні дані підтверджують, що порядок виконання - це те, що ви очікували:

Збирається збільшити

Масштабування розпочато

Масштабування завершено!


Однак незрозуміло, що вам потрібносписокзмінна для - залежно від того, чи хочете ви її використовувати раніше або після подія масштабування, можливо, вам доведеться трохи переробити код.


У Openlayers є завантаження подія, щоб прослухати рівень (шари), а не зіставити карту, коли вона завантажена, перевірте код нижче та посилання:

var mylayer = "// Об'єкт шару Openlayers mylayer.events.register (" loadend ", mylayer, function () {console.log ('шар завантажений');});

посилання: http://dev.openlayers.org/examples/layerLoadMonitoring.html