전단지 마커를 마우스 오른쪽 버튼으로 클릭하여 이벤트 전파를 중지하려면 어떻게합니까? { do_something();

Leaflet 마커에서 rightclick 이벤트를 찾지 못해 mousedown 이벤트를 듣기 시작했습니다. 이 이벤트를 해결하는 방법에서 확인합니다.

if (event.originalEvent.button == 2) {
    do_something();
    // now i want to stop propagation of the rightclick
    return;
}

do_something ()이 호출되었지만 이벤트가 맵으로 전파되고 컨텍스트 메뉴가 표시됩니다. 이벤트가지도로 전파되지 않도록하려면 어떻게해야하나요?

이것은 모든 주요 (즉, IE) 브라우저에서 작동합니까?



답변

첫 번째 대답은 분명히 작동하지 않았으며 현재 동일한 문제에 직면하고 있습니다. 새로운 접근 방식은 다음과 같습니다.

리플렛은이라는 이벤트를 지원합니다 contextmenu. 리플렛 이벤트 설명서 에서 확인할 수 있습니다 .

사용자가지도에서 마우스 오른쪽 버튼을 누르면 이 이벤트에 리스너가 있는지 기본 브라우저 상황에 맞는 메뉴가 표시 되지 않습니다.

이론적으로 코드

marker.on('contextmenu', function(e) {
  this.openPopup();
});

해야 잘 작동합니다. 그러나 분명히 구현이 문서보다 뒤떨어집니다. 현재 (Leaflet 0.4.5)이 contextmenu이벤트는 폴리 라인 객체에서 완벽하게 작동하지만 마커에서 아직 지원 되지 않는 것 같습니다 .

머지 않아이 기능을 활성화하기 위해 파이프 라인에 작업이있는 것 같습니다 ( 여기여기의 토론 참조 ). 따라서 Leaflet이 신속하게 작동하고 다음 릴리스에서 이벤트를 활성화하기를 바랍니다.

편집 :
구현을 기다리는 것에 대해 말한 것을 무시하십시오. 최신 개발 마스터 브랜치를 다운로드하고 전단지를 직접 작성하면 contextmenu마커의 이벤트를 완벽하게 지원할 수 있습니다. 행복한 코딩.


답변

IE 및 다른 모든 브라우저에서 기본 동작 방지

event.returnValue = false;
if (event.preventDefault) event.preventDefault();

답변

이 내부 기능을 사용해보십시오 :

L.DomEvent.stopPropagation(event);

트릭을해야합니다.

추신 : 나는 어떤 문서에서도 그것을 발견하지 못했지만 패치에서 사용되는 것을 보았습니다. 자신의 책임하에 사용하십시오. 😉

편집 : 나는 또한이 내부 기능을 발견했다.

L.DomEvent.preventDefault(event);

어느 것이 event.preventDefault()jQuery 와 거의 같은 것 같습니다 .


답변

우연히 이벤트 중지에 대한 해결책을 얻었습니다.

예를 들어 다음과 같이 이벤트가 생성되면 map.on("click", onMapClick);이 코드로 이벤트를 중지 할 수 있습니다.map.off("click", onMapClick);