Более чистый способ реализации подхода setTimeout()
- запуск пользовательских событий для одного клика.
Следующая функция берет любой объект интерфейса Google Maps (например, карту, маркер, многоугольник и т. Д.) И устанавливает два пользовательских события:
singleclick
: вызывается через 400 мсек после клика, если других щелчков не было
firstclick
: вызывается всякий раз, когда происходит событие щелчка, если только за последние 400 мс не было щелчка (это удобно для отображения какой-либо немедленной обратной связи с пользователем)
function addSingleClickEvents(target) {
var delay = 400;
var clickTimer;
var lastClickTime = 0;
google.maps.event.addListener(target, 'click', handleClick);
google.maps.event.addListener(target, 'dblclick', handleDoubleClick);
function handleClick(e) {
var clickTime = +new Date();
var timeSinceLastClick = clickTime - lastClickTime;
if(timeSinceLastClick > delay) {
google.maps.event.trigger(target, 'firstclick', e);
clickTimer = setTimeout(function() {
google.maps.event.trigger(target, 'singleclick', e);
}, delay);
} else {
clearTimeout(clickTimer);
}
lastClickTime = clickTime;
}
function handleDoubleClick(e) {
clearTimeout(clickTimer);
lastClickTime = +new Date();
}
}
Вы можете использовать его так:
var map = ....
addSingleClickEvents(map);
google.maps.event.addListener(map, 'singleclick', function(event) {
console.log("Single click detected at: " + event.latLng);
}