Google Maps API v3, как изменить значок маркера при нажатии

Как я могу изменить значок маркера при нажатии на маркер (на событие click) и вернуть его обратно в обычный значок при нажатии на другой маркер?

2 ответов


Я не проверял этот код, так что могут быть опечатки или ошибки, но это должно дать вам идею.

во-первых, определите обратный вызов, чтобы установить все маркеры на обычный значок (чтобы сбросить все ранее нажатые маркеры) и установить значок текущего нажатого маркера на выбранный значок:

var markerCallback = function() {
    for (var i=0; i<arrayOfMarkers.length; i++) {
        arrayOfMarkers[i].setIcon(normalIcon);
    }
    this.setIcon(selectedIcon);
 }

затем назначьте обратный вызов событию click на каждом маркере следующим образом:

google.maps.event.addListener(marker, 'click', markerCallback); 

есть, конечно, некоторые улучшения кода, которые могут быть сделаны. Например, вы может не захочется normalIcon, selectedIcon и arrayOfMarkers быть глобальными переменными, как предполагает приведенный выше код. И если у вас много маркеров, вы, вероятно, хотите вместо этого отслеживать ранее выбранный маркер, а не иметь for loop сбросьте значок на каждом из них.

но, как я сказал, это должно дать вам идею.


в любом случае, кто-то хочет увидеть пример отслеживания предыдущего маркера в глобальной переменной, такой как упомянутый Каспер, вот что я сделал:

google.maps.event.addListener(marker,'click',function() {

        if (selectedMarker) {
            selectedMarker.setIcon(normalIcon);
        }
        marker.setIcon(selectedIcon);
        selectedMarker = marker;
    });

(после установки selectedMarker в качестве глобальной переменной)