Клуб API Карт

Калбэк функция, вызываемая после помещения всех меток на карту.

Пост в архиве.

Я аяксом подгружаю координаты для меток и в цикле расставляю метки на карте, но почему то они не по одной появляются на карте, а все вместе.

В цикле расставляю с помощью: map.geoObjects.add(ymarker);

До появления всех меток уходит какое то время : тоесть скрипт завершил работу, потом пауза, а потом только появляются метки.

Я бы хотел пока все метки не выведуться показывать прелоадер.

Спасибо за помощь!

 

10 комментариев

function (data){

   var arr = data

   $("#loader").show()

   for(var i = 0; arr.length > i; i++){

   myMap.geoObjects.add(Placemark);

   }

   $("#loader").hide()

}

 

 

 

Так и делаю.

Но после того как срабатывает  $("#loader").hide() еще проходит не мало времени пока появятся метки. Их подгружается не меньше 200

вам бы лучше создать коллекцию и циклом создавать в коллекции объекты

 

points = new ymaps.Collection();
myMap.geoObjecs.add(points);
$("#loader").hide()
for(){
  points.add(Placemark)
}
 $("#loader").show()
100% рабочий метод
points.removeAll() // так, на всякий случай

Все равно не получается. Теоретически должно по одной метке показываться после того как цикл их добавляет, а они все равно все разом показываются после полной загрузки.

Если я не ошибаюсь Вы в коде перепутали местами

$("#loader").hide() и $("#loader").show()

Перепутал). Уточню вопрос вы хотите показываеть лоадер или показывать метки по одному на карте?

Лоадер показывается в любом случае.

Хочу  прятать  лоадер после того как появятся все метки на карте,

либо прятать когда появится хотя бы одна метка на карте.

Просто думаю что пользователь должен видеть что что-то происходит. А у меня получается что прячется прелоадер, а потом еще секунды 2-3 пользователь наблюдает пустую карту перед тем как  метки появляются.

 

Опишу процесс работы карты на всякий:

1) Пользователь жмет на кнпку

2) Инициализируется карта и срабатывает аякс который подгружает метки

3) Метки циклом наносятся на карту.

$(loader).show()

 

var count = arr.length

for(){

}

 

var live = setInterval(function(){points.getLength() == count ? ($(loader).hide(), clearInterval(live)) : null}, 300)

 

тока так вы можете решить вашу задачу

Спасибо за помощь! Буду думать.

вы ссылку показали бы хотя бы

ссылку сейчас не могу показать. Делаю на хосте разработки с паролем. Там куча кода, голову можно сломать.

Вобщем я пока что забью, это не смертельно, просто думал есть стандартный метод может какой то, но если нет так нет.