2014-02-13 5 views
4

지도에서 Ctrl 키를 누른 상태에서 마커를 클릭하여 여러 마커를 선택하도록하고 있습니다. latLng 특성 이상이 e 개체에 대한 어떠한 정보 나 문서가이없는 Google지도 V3 docs에서Ctrl 키를 누른 채로 Google지도를 클릭하십시오.

google.maps.event.addListener(marker, 'click', function (e) { 
    // detect if is pressed ctrlKey or not to do stuff 
} 

:

는이 일을 위해, 나는이 코드를 작성합니다. 하지만 Chrome으로 디버깅 할 때 정확히 내가 필요한 항목이 포함 된 Ra 개체가 표시됩니다. 내 질문에,이 문서화되지 않은 Ra에 대한 액세스를 ctrlKey를 눌렀을 때 얻을 수 있도록 하드 코딩해도 안전합니까?

enter image description here

+2

에서 [된 MouseEvent] (https://developers.google.com/maps/documentation/javascript/reference#MouseEvent)이 약 많은 정보가있다 알고 그것을 일정한 이름을 API 문서 문서화되지 않은 것이 사용하기에 안전하다고 생각해서는 안됩니다. API에 대한 향후 업데이트는 사전에 경고하지 않고 문서화되지 않은 객체를 제거하거나 수정할 수 있습니다. – duncan

+0

정확하게 "정확히 필요한 것"은 무엇입니까? 'Ra'는 대부분 정의되지 않았습니다. – davidkonrad

답변

7

의견에 대한 질문으로, 무엇을 중요 Ra는 포함? 내 경험에 따르면 Google지도는 내부 변수/객체 이름을 지속적으로 변경합니다.


그러나, 아래로 Ctrl 키을 잡고 마커를 클릭하여 여러 마커를 선택하는 방법을 보여주는 데모 만들었다 :

참조 바이올린 ->http://jsfiddle.net/FbGa5/
공지 사항 : ctrl 또는 다른 키 누르기를 캡처하기 전에지도를 한 번 클릭하여 iframe을 활성화해야합니다. 키 Ctrl 키

보관할 트랙 :

var selecting = false, 
    selectedMarkers = []; 

window.onkeydown = function(e) { 
    selecting = ((e.keyIdentifier == 'Control') || (e.ctrlKey == true)); 
} 
window.onkeyup = function(e) { 
    selecting = false; 
} 

선택 마커 Ctrl 키를 - 키가 다운 및 마커를 클릭합니다.

google.maps.event.addListener(marker, 'click', function() { 
    if (!selecting) return; 
    var id = this.id; 
    var index = selectedMarkers.indexOf(id); 
    if (index>-1) { 
    this.setIcon('https://maps.gstatic.com/mapfiles/ms2/micons/red-dot.png'); 
    selectedMarkers.splice(index, 1); 
    } else { 
    selectedMarkers.push(id);    
    this.setIcon('https://maps.gstatic.com/mapfiles/ms2/micons/blue-dot.png'); 
    } 
}); 

결론 : 마커를 선택하면 마커가 해제되면, 그것은 빨간색으로 다시 전환, 파란색으로 변합니다 당신은 Ra 나에 그것을 얻기 위하여 마커 클릭 이벤트의 다른 인수가 필요하지 않습니다 작업.

+0

이 사람을 가져 주셔서 감사합니다! 명확히하기 위해, 나는 아마도 "Ra"가 "유령"물체가 될 것이라는 것을 알고 있습니다, 그것은 제가 물었 기 때문입니다. "정확히 내가 필요로하는 것"에 대해서, 나는이 객체 안에는 많은 도움이되는 플래그'ctrlKey'가 있어야한다고 말해야한다. –

+0

@AgustinMeriles - 오신 것을 환영합니다! 이제 알았어. 다양한 이벤트에서 Ra를 모니터하려고 시도했지만 거의 항상 정의되지 않은 것처럼 보였습니다. – davidkonrad

+0

@AgustinMeriles, 코드와 새로운 바이올린에 대한 작은 업데이트를 만들었습니다. FireFox에서 ctrl-key가 제대로 감지되지 않았으므로 지금 수정되었습니다. Opera에서도 테스트되었습니다. – davidkonrad

1

수업 구성원이 축소로 인해 변경된 것으로 생각됩니다. 완벽하지는 않다는 내 생각은 이름이 아닌 유형의 MouseEvent를 찾는 것입니다. 그런 다음, 발견했을 때, 당신은

google.maps.event.addListener(marker, 'click', function (e) { 
    // detect if is pressed ctrlKey or not to do stuff 

    //detect the mouse event member by type 
    //and always give it the name "mouseEvent"   
    for (var key in e) { 
     if (e[key] instanceof MouseEvent) { 
      e["mouseEvent"] = e[key]; 
      break; 
     } 
    } 

    // e.mouseEvent.ctrlKey .... 

} 
+0

완벽한 작업. 감사 ! – PlayHardGoPro

+0

더 이상 이유가 없습니다. 'shiftKey'는 항상 false를 반환합니다. 나는 그것이 구글 API와 관련이 있다고 생각한다. – PlayHardGoPro

+0

Google API URL에 버전 번호를 추가하여 고정 버전의 Google API를 사용해보십시오. 좋아요 : https://maps.googleapis.com/maps/api/js?v=3.29 & key = YOUR_API_KEY 자세히보기 : https://developers.google.com/maps/documentation/javascript/versions Google API의 특정 버전 또는 코드와 관련된 문제인지 여부를 알려줍니다. –

관련 문제