>

지역 선택 플러그인을 사용하고 있습니다. 기본적으로 ctrlKey 상자 드래그에 응답합니다. 기본적으로 Leaflet boxZoom은 shiftKey 상자 드래그에 응답합니다. 지금까지는 모두 좋았습니다. 그러나 ctrlKey + shiftKey 상자 드래그는 Leaflet boxZoom 및 영역 선택 플러그인을 트리거합니다. 대신 영역 선택 플러그인을 트리거하고 싶습니다. 어떤 제안?


  • 답변 # 1

    BoxZoom 에 대한 Leaflet의 소스 코드를 보면  맵 핸들러에서 상자 이동을 시작하기 위해 누른 Shift 키와 기본 ( ""왼쪽 "") 마우스/포인터 단추를 확인하는 선을 볼 수 있습니다.

    _onMouseDown: function (e) {
        if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
    
    

    ctrlKey 를 확인하기 위해 변경하고 싶습니다. true 로 설정된 경우 상자 줌이 시작되지 않도록 , 같은 :

       if (!e.shiftKey || e.ctrlKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
    
    

    문제는 모든 것을 다시 쓰거나 깨뜨리지 않고이 작업을 수행하는 방법입니다. 접근 방식은 BoxZoom 에서 해당 방법을 원숭이 패치하는 것입니다.  핸들러의 prototype  예를 들어 오래된 것을 참조하면서 다음과 같은 것 :

    var oldBoxZoomMouseDown = L.Map.BoxZoom.prototype._onMouseDown;
    L.Map.BoxZoom.prototype._onMouseDown = function(ev) {
        // Worry only about ctrlKey...
        if (ev.ctrlKey) { return false; }
        // ...and let the previous event handler worry about shift and primary button
        oldBoxZoomMouseDown.call(this, ev);
    }
    
    

    지도가 인스턴스화되기 전에완료된 경우에만 작동합니다. BoxZoom 의 방법을 대체하는 것과 같은 다른 접근법이 있습니다.  맵이 인스턴스화되고 BoxZoom 의 서브 클래스를 작성한 후인스턴스  매니저. 이 시점에서 자바 스크립트의 프로토 타입 상속 및 Leaflet의 OOP 처리 방법에 대한 정보를 읽는 것이 좋습니다.

  • 이전 Angular 6에서 momentjs를 사용하여 날짜 시간대를 utc로 변환하는 방법
  • 다음 특정 안드로이드 앱 버전에 대한 Firebase 데이터 메시지