2013-08-26 6 views
5

Я пользуюсь Google Maps v3 с помощью MarkerClustererPlus. Click for docsАнимационный кластер markerclusterer

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

marker.setAnimation(google.maps.Animation.BOUNCE); 

Но я хочу отскочить весь значок кластера. Я могу получить кластер:

markerCluster.getClusters(); 

Но как я могу связать кластер-DIV с моим getClusters() - массив? Я не знаю, какой div принадлежит кластеру из функции getClusters().

ответ

8

Это невозможно сделать задокументированными методами/свойствами, но вы можете получить доступ к этим свойствам.

  • Шаг № 1: Каждый кластер имеет markers_ -свойство, который представляет собой массив, который содержит все маркера кластера. Перебрать все кластеры и проверить, если markers _-массив содержит разыскиваемый маркер

  • Шаг № 2:, когда вы нашли кластер с разыскиваемым маркером, доступом к свойству clusterIcon_.div_ кластера, это элемент что представляет собой-иконку кластера,

    //attach listener to clusteringend-event 
    google.maps.event.addListener(markerClustererInstance,'clusteringend',function(){ 
    
    //iterate over all clusters 
    var clusters=this.getClusters(); 
    for(var i = 0; i < clusters.length;++i){ 
    
    if(clusters[i].markers_.length > 1 
         && clusters[i].clusterIcon_.div_){ 
    
         // clusters[i].clusterIcon_.div_ is the HTMLElement 
         // that contains the wanted clusterIcon, 
         // you should at first reset here recently applied changes 
    
         if(clusters[i].markers_.indexOf(wantedMarker)>-1){ 
          //the marker has been found, do something with it 
         } 
        } 
    }}); 
    

    Но Примечание: кластерной иконка не google.maps.Marker, вы не можете просто применить анимацию, как вы можете сделать это с родным маркером. Кроме того: анимация, которая изменит положение значка кластера (например, отскок), может повлиять на markerClusterer, я бы предложил использовать эффекты, которые могут быть применены путем изменения цвета или изменения фонового изображения (кластер-значки вы см. фоновые изображения div).

+0

Да, это работает как шарм! Спасибо – chaosbohne

+0

У меня действительно есть аналогичная проблема. Я получил анимацию в кластере, добавив класс в свою div_ (анимация css3). Однако проблема возникает, когда пользователь увеличивает/уменьшает остановку анимации, потому что кластеры были сброшены, поэтому добавленные классы исчезли. Я попытался отслеживать маркер внутри кластера, который я хочу оживить, а затем при масштабировании, который вызывает «clusteringend», я снова добавлю этот класс. Однако это не сработало ... :(Как я могу предотвратить остановку анимации после увеличения/уменьшения масштаба? –

Смежные вопросы