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?我想念什么?
谢谢!
使用未记录的属性几乎总是一个坏主意。如果你能可能避免它,避免它。在这种情况下,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属性的值。
这是假设,当他们从改变Ua到Pa,他们不使用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等较旧的浏览器,可以将其填充。