[英]Detect shiftKey for mouse event on google maps v3 polygon
使用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?
Ua
vs. Pa
: 您可以進行特征檢測:
var shiftKey = (event.Ua || event.Pa).shiftKey;
它使用JavaScript的強大功能||
運算符引用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等較舊的瀏覽器,可以將其填充。
最后我得到了一個接近amenadiel答案的解決方案。 我認為最好不要中繼所有可能的丑陋的變量名,而是要尋找一個是MouseEvent
並使用該變量來檢查shiftKey
屬性,如下所示:
function polygonListener(polygonEvent) {
var shiftKey = false;
for(var i in polygonEvent){
if(polygonEvent[i] instanceof window.MouseEvent){
shiftKey = polygonEvent[i].shiftKey;
break;
}
}
// Rest of the code
}
我剛遇到這個問題(注意到我不能只使用window.event,因為Firefox不支持它)
正如TJ Crowder所說, google.maps.mouseEvent具有一個包含諸如shiftKey
, altKey
等鍵的屬性。在當前版本的google maps api中,該屬性為va
。 因此,我們當然不能使用它,因為它的名稱將在so的下一個版本中更改。
因此,我的解決方案是遍歷google.maps.mouseEvent
參數,檢查其值,以便查看其中一個是有效的window.MouseEvent 。
var newcircle= new google.maps.Circle({map:map, position:map.getCenter(), radius:1000});
google.maps.event.addListener(newcircle,'click',function(mouseEvent) {
var event = Object.values(mouseEvent)
.filter(function (property) {
return property instanceof window.MouseEvent;
});
if (event.length) {
event = event[0];
} else {
event = {};
}
var shiftKey = event.shiftKey || false;
});
有趣的是,當我嘗試在本示例中使用標記時, google.maps.mouseEvent
沒有window.MouseEvent
的實例。
如果有人還在尋找如何從Google Maps事件獲取MouseEvent
的方法,這就是我一直使用的方法。
const mouseEvent = Object.values(event).find(p => p instanceof window.MouseEvent);
// then do whatever with the MouseEvent
const shiftKey = mouseEvent.shiftKey;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.