#angular #google-maps-api-3
Вопрос:
В моем коде я хочу, чтобы между щелчком и щелчком мыши на моей карте Google в angular выполнялось другое действие. Мне интересно, как я могу это сделать. Я регистрирую своих слушателей вот так
google.maps.event.addListener(polygon, 'click', (event) => {
console.log('We clicked the polygon');
console.log(polygon);
});
google.maps.event.addListener(polygon, 'dblclick', (event) => {
console.log('We double clicked the polygon');
console.log(polygon);
});
И это прекрасно работает, моя единственная проблема в том, что перед запуском события dblclick мы также запускаем щелчок. Итак, мой вопрос в том, каков был бы наилучший способ отложить запуск события щелчка на x раз, чтобы дождаться возможного щелчка и сработать только в том случае, если мы не запустили щелчок ?
Ответ №1:
Установите время ожидания (здесь 500 мс) для события щелчка и отмените его при двойном щелчке.
function initialize() {
var myLatLng = new google.maps.LatLng(0, 0);
var mapOptions = {
zoom: 4,
center: myLatLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
let t;
google.maps.event.addListener(map, 'click', (event) => {
t = setTimeout(function() {
console.log('click');
}, 500);
});
google.maps.event.addListener(map, 'dblclick', (event) => {
console.log('double click');
clearTimeout(t);
});
}
#map-canvas {
height: 180px;
}
<div id="map-canvas"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qkamp;callback=initialize" async defer></script>
Обратите внимание, что это не очень надежно, потому что :
- Мы не знаем точного времени ожидания, разрешенного для запуска события двойного щелчка в API, и
- Похоже, существует проблема в последовательности, в которой
click
dblclick
события и срабатывают при более медленном двойном щелчке. Я сообщил об этом здесь.