Этот вопрос задают часто, но на самом деле он не ответил хорошо. Посмотрим, можем ли мы исправить это!
Распространение событий
Google позволяет привязываться к событиям в виде карты Google через их API, используя обработчики событий.
Иногда вы можете привязать обработчик событий к событию, к которому уже привязан сам Google. Таким образом, когда ваше событие срабатывает и делает все, что вы ему сказали, вы можете обнаружить, что Google также делает свою собственную мелочь в то же время.
Хм, могу ли я обработать событие, чтобы мой код запускался, но остановить событие от продолжения и увольнения обработчика событий Google?
Вы можете! Добро пожаловать в Event Propagation
(также называемый Event Bubbling).
Взгляните на этот код
Здесь я привязываю обработчик события к двойному щелчку на карте Google:
var aListener = google.maps.event.addListener(map, 'dblclick', function(event) {
// Try to prevent event propagation to the map
event.stop();
event.cancelBubble = true;
if (event.stopPropagation) {
event.stopPropagation();
}
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
});
Здесь map
- объект Google Map для привязки.
Это не работает. Событие пузыри, и карта увеличивает. Я не знаю, почему.
Вы спрашиваете, прочитали ли вы документацию?
Действительно. documentation говорит использовать event.stop();
Я посмотрел, что говорят другие. Эта проблема - это моя проблема. Он был отмечен как фиксированный, но решение не работает.
Идеи?
Обход
Возможным обходным путем для события doubleclick является отключение поведения по умолчанию Google, когда вам нужно его не запускать, а затем снова включить его позже.
Вы делаете это с помощью аргумента disableDoubleClickZoom
. См. Документацию здесь.
Вот какой код отключить:
map.set("disableDoubleClickZoom", true);
Теперь для повторного включения:
map.set("disableDoubleClickZoom", false);
Конечно, вы можете установить свойство в аргументе MapOptions
, если вначале создается объект map
.