Как определить, нажата ли карта или маркер

1

Еще раз спасибо за великолепный API карты.

В настоящее время мы пытаемся определить, был ли нажат маркер или карта. Мы добавили слушателей событий как к карте, так и к маркеру (добавленному как группа).
Когда мы теперь нажимаем на карту, оба сценария запускаются.

Мы что-то пропустили в документах API? Я думаю, что должен быть способ получить правильную информацию о том, что было нажато.

Приемник событий карты

map.addEventListener('tap', (event) => {
  action(event);
});

Прослушиватель событий маркера

marker.addEventListener('tap', (event) => {
  action(event);
});

Заранее спасибо.

  • 2
    Вы не против показать свой код или добавить упрощенную скрипку для всех нас?
  • 0
    можешь поделиться кодом?
Показать ещё 1 комментарий
Теги:
here-api

2 ответа

0
Лучший ответ

Лучше остаться с единственным слушателем на объекте карты.

Главное - проверить экземпляр event.target:

map.addEventListener('tap', event => {
   if (event.target instanceof H.map.Marker) {
       // Some action. Typically, you want to use the data that you may have referenced
       // in the marker creation code, or get the coordinates. Here we log the data
       console.log( event.target.getData() );
    }
}
  • 0
    Большое спасибо за быстрый и надежный ответ
0

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

https://developers.google.com/maps/documentation/javascript/events

<!DOCTYPE html>
<html>

<head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Simple Markers</title>
    <style>
        /* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
        #map {
            height: 100%;
        }

        /* Optional: Makes the sample page fill the window. */
        html,
        body {
            height: 100%;
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body>
    <div id="map"></div>
    <script>
        var map, marker;

        function initMap() {
            var myLatLng = {
                lat: -25.363,
                lng: 131.044
            };

            var map = new google.maps.Map(document.getElementById('map'), {
                zoom: 4,
                center: myLatLng
            });

            var marker = new google.maps.Marker({
                position: myLatLng,
                map: map,
                title: 'Hello World!'
            });

            map.addListener('click', (event) => {
                console.log(event, 'from map')
            });
            marker.addListener('click', (event) => {
                console.log(event, 'from marker')
            });

        }
    </script>
    <script async defer src="https://maps.googleapis.com/maps/api/js?key=YOURKEY&callback=initMap">
    </script>
</body>

</html>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню