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

Ron*_*ald 3 javascript google-maps polygon mouseevent google-maps-api-3

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

我也收到了鼠标事件,我可以看到原始事件被包裹在一个谷歌事件类,这就是我们所需要的(访问事件。Ua的 .shiftKey属性)。

但是,我发现上个月Google可能已经更新了他们的api,现在该属性已重命名为event。Pa .shiftKey。

供参考,请参阅http://i.stack.imgur.com/80npD.png,以获取webinspector中事件结构的屏幕截图。有没有什么方法可以检测在使用事件单击google maps多边形期间是否按下了Shift键,而不必依赖google-not-updating-their-api?我想念什么?

谢谢!

T.J*_*der 5

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

有没有什么方法可以检测在使用事件单击google maps多边形期间是否按下了Shift键,而不必依赖google-not-updating-their-api?

如果只是Uavs . Pa

您可以进行特征检测:

var shiftKey = (event.Ua || event.Pa).shiftKey;
Run Code Online (Sandbox Code Playgroud)

它使用JavaScript 异常强大的||运算符来引用Ua属性的值(如果有的话),并且它是真实的;否则,引用Pa属性的值。

这是假设,当他们从改变UaPa,他们不使用Ua别的东西。如果有可能,可以使用以下更详尽的版本:

var shiftKey = ((event.Ua && 'shiftKey' in event.Ua) ? event.Ua : event.Pa).shiftKey;
Run Code Online (Sandbox Code Playgroud)

专门检查Ua具有shiftKey属性的对象,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
}
Run Code Online (Sandbox Code Playgroud)

旁注:Object.keys所有现代浏览器均具有ES5功能。如果您需要支持IE8等较旧的浏览器,可以将其填充。