Показать сообщение отдельно
  #1 (permalink)  
Старый 19.03.2015, 14:14
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 79

YandexMap: Раскрыть кластер и показать баллун
Уважаемые, может кто сталкивался с таким вопросом?
Есть карта с кластеризатором. Сбоку -- список названий точек, размещенных на этой карте.
При клике по ссылке активируется соответствующий баллун. Но для точек, находящихся в данный момент в кластере баллун не активируется. Как сделать так, чтобы при клике по ссылке с названием точки, находящейся в кластере происходило увеличение карты до раскрытия кластера и выводился баллун?

Вот как у меня это реализовано:
data -- это массив с точками, полученный по запросу с сервера
myMap -- объект карты.

var $points = [];
var $ul = $('<ul class="cat-map-item-list"></ul>');
for(var count = 0; count < data.length; count++){
     $points[count] = addListItem($ul, data[count]);
}
$ul.appendTo('#cat-list-box');
addPointList(myMap, $points);

 

// Здесь создаем точку и создаем элемент списка. Вешаем на него прерывание по клику

function addListItem($ul, data){
    var $li = $("<li><a href='#' id='map-list-item-" + data.id + "' data-id='" + data.id + "' class='switch-off'>" + data.properties.hintContent + "</a></li>");
    var $newPoint = new ymaps.GeoObject(data);

    // Обработчик клика по ссылке
    $li.appendTo($ul).find('a').click(function(){
        if($(this).hasClass('switch-on')){
            $(this).removeClass('switch-on').addClass('switch-off');
            $newPoint.balloon.close();
        }else{
            $('.switch-on').removeClass('switch-on').addClass('switch-off');
            $(this).removeClass('switch-off').addClass('switch-on');
            $newPoint.balloon.open();
        }
    });
    return $newPoint
}

 // А тут создаем кластеризатор и добавляем в него точки
function addPointList(myMap, $points){
    var clusterer = new ymaps.Clusterer({clusterDisableClickZoom: false});
    clusterer.add($points);
    myMap.geoObjects.add(clusterer);
}
Ответить с цитированием