javascript - 在谷歌地图 v3 多边形上检测鼠标事件的 shiftKey

标签 javascript google-maps google-maps-api-3 mouseevent polygon

在使用 google maps V3(.16) javascript API 时,有没有办法检测多边形上的 shift-mouseclick? https://developers.google.com/maps/documentation/javascript/reference#MouseEvent

我确实收到了鼠标事件,并且我可以看到原始事件被包装在一个 google 事件类中,这正是我们所需要的(访问事件。Ua.shiftKey 属性)。

然而我发现上个月,google 可能已经更新了他们的 api,现在属性被重命名为 event.Pa.shiftKey。

引用见http://i.stack.imgur.com/80npD.png获取 webinspector 中事件结构的屏幕截图。 有没有办法检测在使用事件点击谷歌地图多边形期间是否按下了 shift 键,而不必依赖 google-not-updating-their-api?我错过了什么?

谢谢!

最佳答案

使用未记录的属性几乎总是一个坏主意。如果您可以可能避免它,请避免它。在这种情况下,API 可能正在使用 Closure Compiler 进行压缩,因此下次更新时,它也可能不再是 Pa

Is there any way to detect whether the shift key is pressed during a click on a google maps polygon using the event, and without having to rely on google-not-updating-their-api?

如果只是 UaPa:

您可以进行特征检测:

var shiftKey = (event.Ua || event.Pa).shiftKey;

使用 JavaScript 的 curiously powerful || operator引用 Ua 属性的值,如果有并且它是真的,否则引用 Pa 属性的值。

这假设当他们将其从 Ua 更改为 Pa 时,他们不会将 Ua 用于其他用途。如果有机会,这个更彻底的版本会做到这一点:

var shiftKey = ((event.Ua && 'shiftKey' in event.Ua) ? event.Ua : event.Pa).shiftKey;

它专门检查具有 shiftKey 属性的 Ua 对象,如果找不到则回退到 Pa

如果可以的话

...你可以搜索一下:

var shiftKey;
if (Object.keys(event).some(function(key) {
      if (event[key] && 'shiftKey' in event[key]) {
          shiftKey = event[key].shiftKey;
          return true;
      }
      return false;
  })) {
    // We found it, `shiftKey` has the value
} else {
    // We didn't find it
}

旁注:Object.keys 是所有现代浏览器上的 ES5 功能。如果需要支持 IE8 等旧版浏览器,可以使用 polyfill。

关于javascript - 在谷歌地图 v3 多边形上检测鼠标事件的 shiftKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28196026/

相关文章:

android - 如何在android上检索预计到达时间?

javascript - 使用 Google map 自定义叠加层创建自定义图标(使用 Raphael JS)

Javascript,奇怪的 float 无限小数?

android - 棘手的 Android 谷歌地图缩放,同时保持中心点

javascript - 使用 css/javascript 在页面中所有图像的右上角动态放置一个按钮/div

javascript - 谷歌地图 API 标记不工作

javascript - 创建点击进入实际 map 的 map 示例

javascript - 如何在谷歌地图标记中添加点击事件?

Sql字符串中的javascript默认值

php - 更改选择标签属性值