gpt4 book ai didi

javascript - 谷歌地图双击事件传播

转载 作者:可可西里 更新时间:2023-11-01 01:26:13 25 4
gpt4 key购买 nike

This question is asked often, but never really answered well. Let's see if we can remedy it!

事件传播

Google 允许您通过其 API 绑定(bind)到 Google map View 中的事件使用 event handlers .

有时,您可能会将事件处理程序绑定(bind)到 Google 自身 已绑定(bind)的事件。因此,当您的事件触发并按照您的指示执行时,您可能会发现 Google 同时也在做自己的小事。

Hmm, can I handle the event so my code runs, but stop the event from continuing on and firing Google's event handler?

你当然可以!欢迎使用事件传播(又名事件冒泡)。

看看这段代码

在这里,我绑定(bind)了一个事件处理程序来双击 Google map :

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 是要绑定(bind)到的 Google Map 对象。

这行不通。事件冒泡, map 放大。我不知道为什么。

You ask, have you read the documentation?

的确如此。 documentation说要使用 event.stop();

我看过别人说的。 This issue正是我的问题。它被标记为已修复,但解决方案不起作用。

想法?

解决方法

doubleclick 事件的一个可能的解决方法是在您需要它不触发时禁用 Google 的默认行为,然后在稍后重新启用它。

您可以使用 disableDoubleClickZoom 参数来执行此操作。请参阅文档 here .

这里是一些要禁用的代码:

map.set("disableDoubleClickZoom", true);

现在重新启用:

map.set("disableDoubleClickZoom", false);

当然,您可以在 MapOptions 参数中设置该属性,以便首先创建 map 对象。

最佳答案

更新: 不幸的是,我发现 Firefox 无法通过 window.event 访问当前事件,因此这段代码成功了在那里工作。我还没有找到解决方法。


事实证明对代码的修复是最小的:只需从事件处理程序函数中删除 event 参数,从而访问处理程序中的全局 window.event 对象.

以下示例代码适用于 IE 和 Chrome,但不适用于 Firefox:

google.maps.event.addListener(map, "dblclick", function(googleMapsEvent) {
console.debug("caught double click");
// reference the global event object
// ignore the googleMapsEvent passed in by Google Maps!
event.preventDefault();
});

This answer让我走上正轨!

关于javascript - 谷歌地图双击事件传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17373677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com