2017-11-29 4 views
-1

Shiftキーを押したときに異なるGoogleマップのクリックでJSアクションが発生しようとしています。組み込みのclickイベントはキー修飾子を与えないため、そのイベントから意思決定を行うことはできません。Shiftキーを押したときのクリック行動が変化するGoogle

しかし、あなたはネイティブのDOMリスナーを追加し、そこにチェックすることができます。

Control key + click event on google mapから適応)
google.maps.event.addDomListener(document.getElementById("map"), 'click', function(event) { 
    if (event.shiftKey) { 
     // do something with x, y e.g. use an overlay to find latLng 
    } 
    else { 
     // do something else 
    } 
}); 

しかし、私はまだ適切なシナリオでは、発射する通常のクリックイベントをしたいです、例えば地図上の通常の領域をクリックしたときに、マーカー上ではクリックしないでください。

map.addListener('click', function(e) { 
     // normal map click 
    }); 

しかし、これはネイティブのDOMイベントの前にイベントが発生をクリックして、私はネイティブのイベントで意思決定を行うためにどのような方法を参照してくださいが、それでも標準クリックの動作を維持することはできません。

何か不足していますか?例えば、組み込みのクリックイベントの前にDOMイベントを発生させる方法はありますか?

+2

"ノーマル"クリックで何をしたいのですか?限り、私はすべてのマップ "ビルトインビヘイビア"(あなたがそれらを停止するために何かをしていない限り)作業を続けることを伝えることができます。おそらくあなたはあなたの "問題"を示す[mcve]を提供することができます。 BTW - 私はまた、一貫した順序、 "Googleマップ"イベント、まず "GoogleのDOM"イベントを参照してください。 – geocodezip

+0

通常のクリックは期待どおりに機能していますが、Shiftキーを押しても問題は発生しません。同じ注文を確認してくれてありがとう - それは私が推測する私の質問の主要な部分だった。 –

+0

私はもう一度私の質問を明確にしようとしました。 –

答えて

0

おそらく明らかですが、通常のクリックイベントでグローバル変数を設定し、その変数が設定されていることをDOMクリックイベントで確認するだけで解決しました。

このように、通常のクリックイベントが発生するのが正しい場合、変数が設定され、シフトキーが押されていない場合はDOMイベントでクリックが有効になります。

シフトキーが下がっている場合は、別の操作をします。

いずれにしても変数をクリアします。

var mapClickFired = false; 

map.addListener("click", function(e) { 
    mapClickFired = true; // acted on in DOM listener below 
}); 

// bind to DOM event as well, so we can find out if modifier keys are pressed 
google.maps.event.addDomListener(document.getElementById("map"), "click", function(event) { 
    // check modifiers 
    if (event.shiftKey) { 
     // do things for shift key down 
    } 
    else if (mapClickFired) { 
     // do things for regular map click 
    } 
    mapClickFired = false; 
}); 

もちろん、これは、これらの2つのイベントの順序が常に予想どおりであるかどうかによって異なります。それは文書化されていないので、私は少し神経質です。私は何か壊れやすいものを作りました。

1

私にとっては、グローバル変数にキャッチするグローバルなキーイベントメッセージを使って解決しました。

var keydn = ""; 
function keyEventDn(event) { 
    keydn = "" 
    if (event.ctrlKey){keydn = "ctrlkey"}; 
    if (event.shiftKey) {keydn = "shiftkey"}; 
    if (event.altKey) {keydn = "altkey"}; 
} 

この機能を使用して初期化することができます。

<body onkeydown="keyEventDn(event)"> 

あなたがそれを必要とwhereever次にあなたは、そこにキーイベントを使用することができます。変数をkeydn = ""に戻すことを忘れないでください。あなたがそれを使用した場合、またはマップ、クリック、マップなどのいくつかのグローバルイベントで移動した場合。

さらに改善の余地を残しておけば:-)。幸運、Reinhard

+0

ありがとう、それは私が調べたことの一つです。残念ながら、アプリに組み込まれたIEコントロールでは何らかの理由で動作しないため、使用できませんでした。 –

+1

Mmmmh、私はローカルBasicのAutoIt GUIに組み込まれたIEコントロール( "Shell.Explorer.2")を使って動作します。次に、GUIでkeyEventsを捕捉できるかどうかを確認します。 yesの場合、htmlページをcontrollの下に置くと、js変数に "keyDn = ctrlkey"を送ることができます。幸運、ラインハルト – ReFran

+0

こんにちはラインハルト、あなたは組み込みのIEコントロールのシフト/ ctrlなどのkeydownsを処理することができますか?私は文字や数字のような特別ではないキーのためにそれをすることができますが、シフトやctrlのためにはできません。もちろん、これらが傍受されている場所を知ることは難しい –

関連する問題