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


9

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

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

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

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

답변:


4

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

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

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

이론적으로 코드

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

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

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

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


4

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

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

작동하지 않는 것 같습니다. Leaflet에서 이것을 테스트 했습니까? 그리고 이벤트가 전단지 이벤트 또는 브라우저에서 시작한 원래 DOMMouseEvent입니까?
mrg

이것은 DOM 이벤트입니다. Leaflet이 이벤트를 랩핑하는 경우 event.originalEvent를 사용하십시오.
tmcw

4

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

L.DomEvent.stopPropagation(event);

트릭을해야합니다.

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

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

L.DomEvent.preventDefault(event);

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


스 니펫을 사용했지만 tmcw의 솔루션과 동일한 결과가 발생합니다. 마커를 마우스 오른쪽 버튼으로 클릭합니다. 청취 방법으로갑니다. 거기에서 마커가 제거됩니다 (즉, 마우스 오른쪽 버튼으로 클릭 해야하는 일). 마커에서 전체 마커가 발생하지 않은 것처럼 클릭 한 컨텍스트 메뉴가 맵에서 열립니다.
mrg

우연히 나는 이것을 발견했다 L.DomEvent.preventDefault(event);. 내가 본 것에서 (Leaflet.js 소스를 보면) 이것은 preventDefault()jQuery 가 제공하는 것과 매우 유사해야합니다 ... 사용해보십시오! :)
fgysin reinstate Monica

나는 그것을 시도했지만 html 페이지를 마우스 오른쪽 버튼으로 클릭하면 FF로 표시되는 표준 컨텍스트 메뉴가 계속 나타납니다.
mrg

2

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.