Как узнать, какой маркер перетаскивается в событие перетаскивания API Карт Google?

События "drag", "dragstart" и "dragend" в Google Maps V3 API передают событие mouseEvent в зарегистрированную функцию обратного вызова.

Однако это событие не содержит никакой информации о том, какой маркер перетаскивается. Как я могу это определить?

Это еще более сложно, если вы просто смотрите на событие "dragend", которое будет иметь только новые координаты, что делает невозможным даже вывод из координат.

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


person Brad    schedule 09.09.2011    source источник


Ответы (1)


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

google.maps.event.addListener(marker, 'dragend', function() {
                //do something with the event.
            });

вот пример скрипта: http://jsfiddle.net/2YQg6/10/ (не обращайте внимания на другие вещи, которые я только что отредактировал скрипку, которую я использовал раньше для обработки перетаскиваемых маркеров.)

Соответствующий код находится в цикле создания маркера:

//geo code and build markers for each list item.
for (var i = 0; i < $listItems.length; i++) {
    geocoder.geocode({
        'address': $($listItems[i]).text()
    }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var marker = new google.maps.Marker({
                position: results[0].geometry.location,
                map: map,
                draggable: true,
                originalPos: results[0].geometry.location
            });

            google.maps.event.addListener(marker, 'dragend', function() {
                infoWindow.setContent("marker originally at this position: " + this.originalPos + " was dragged to: " + this.position);
                infoWindow.open(map, this);
            });


            markers.push(marker);
        }        

});
}
person Bryan Weaver    schedule 09.09.2011
comment
Короче говоря, это ключевое слово в вашей функции прослушивателя будет указывать на ваш маркер - person Danny Cohn; 11.09.2011
comment
не могу не подчеркнуть полезность комментария Дэнни, так как я не могу найти эту информацию нигде в документации Google. - person ghost23; 09.01.2013
comment
this не будет в документации Google, так как это часть языка JavaScript. stackoverflow.com/questions/3127429/javascript-this-keyword - person Bryan Weaver; 09.01.2013
comment
@Bryan Weaver ... как я могу найти экземпляр маркера, используя синтаксис анонимной функции ES6, то есть используя ()=›{ } для обработчика событий dragend? - person Shivam; 16.03.2017