2017-11-29 5 views
-1

시프트 키를 누르고있을 때와 다른 Google지도 클릭시 JS 동작이 발생하려고합니다. 기본 제공되는 클릭 이벤트는 키 수정자를 제공하지 않으므로 해당 이벤트에서 의사 결정을 내릴 수 없습니다.Google지도 시프트 키가 내려갈 때 클릭 동작이 변경됨

하지만 기본 DOM 리스너를 추가하고, 거기에 확인할 수 있습니다

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 
    } 
}); 

적절한 시나리오에서,

는 그러나, 나는 여전히 정상적인 클릭 이벤트가 발생 할 (Control key + click event on google map에서 적응) 예를 들어지도의 일반 영역을 클릭 할 때 마커를 클릭하면 안됩니다.

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

그러나,이 클릭 이벤트가 발생는 기본 DOM 이벤트 전에, 그래서 기본 이벤트에서 의사 결정을 여전히 표준 클릭의 동작을 유지할 수있는 방법을 볼 수 없습니다.

내가 누락 된 항목이 있습니까? 예를 들어 내장 된 클릭 이벤트 이전에 DOM 이벤트가 실행되도록하는 방법이 있습니까?

+2

"정상적인"클릭이 작동하지 않으려면 어떻게해야합니까? 내가 할 수있는 한 모든지도가 "내장 된 행동"을 계속할 수 있습니다 (당신이 그들을 막을 무언가를하지 않는 한). 아마도 당신은 당신의 "이슈"를 보여주는 [mcve]를 제공 할 수 있습니다. BTW - 나는 또한 일관된 주문, "Google지도"이벤트, 먼저 "Google DOM"이벤트를 참조하십시오. – geocodezip

+0

정상적인 클릭은 예상대로 작동하지만 Shift 키를 누르고 있어도 발생합니다. 원하지 않는 경우입니다. 동일한 주문을 확인해 주셔서 감사합니다 - 그것은 내가 추측하는 나의 질문의 주요 부분이었다. –

+0

나는 다시 내 질문을 명확히하려고 노력했습니다. –

답변

0

아마 분명하지만 일반적인 클릭 이벤트에서 전역 변수를 설정 한 다음 DOM 클릭 이벤트에서 설정중인 변수를 확인하는 것으로 해결할 수 있습니다.

이렇게하면 정상적인 클릭 이벤트가 발생하는 상황이 맞으면 Shift 키가 눌러지지 않은 상태에서 변수가 설정되고 DOM 이벤트에서 클릭이 적용됩니다.

Shift 키가 눌러져 있으면 다른 작업을 수행합니다.

어느 쪽이든 우리는 변수를 지 웁니다.

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; 
}); 

물론이 두 가지 이벤트의 순서는 예상대로 유지됩니다. 문서화되지 않았기 때문에 조금 불안해졌습니다. 무언가 깨지기 쉽도록 만들었습니다.

1

나를 위해 글로벌 변수에 잡는 글로벌 키 이벤트 메시지로 해결했습니다. 당신이 그것을 필요 whereever 그런 다음, 거기에 키 이벤트를 사용할 수 있습니다

<body onkeydown="keyEventDn(event)"> 

:

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

이 기능

함께 초기화 할 수 있습니다. 변수를 다시 keydn = ""로 재설정하는 것을 잊지 마십시오. 지도를 클릭하거나 클릭하거나 이동 한 것과 같은 일부 글로벌 이벤트 또는 이벤트를 사용한 경우

추가 개선 할 부분을 남겨두면 :-). 행운을 빌어 요, Reinhard

+0

고마워요. 내가 들여다 보는 방법 중 하나입니다. 불행히도 IE 컨트롤에서 앱에 임베디드되어 작동하지 않기 때문에 사용할 수 없습니다. –

+1

Mmmmh, 로컬 기본에서 AutoIt GUI에 내장 된 IE controll ("Shell.Explorer.2")을 사용하여 작업합니다. 다음으로 GUI에서 keyEvent를 잡을 수 있는지 확인합니다. 그렇다면 html 페이지를 controll 아래에두면 js 변수에 "keyDn = ctrlkey"를 보낼 수 있습니다. 행운을 빌어 요, Reinhard – ReFran

+0

안녕하세요 Reinhard, 임베디드 IE 컨트롤에서 shift/ctrl 등의 keydowns를 처리 할 수 ​​있습니까? 나는 글자와 숫자와 같은 특수하지 않은 키에 대해서는 할 수 있지만 shift와 ctrl에는 적용 할 수 없습니다. 물론 이들이 도청되는 곳을 밝히기는 어렵습니다. –