отключить boxZoom при активной клавише управления - PullRequest
0 голосов
/ 13 июня 2019

Я использую плагин select area.По умолчанию он отвечает на перетаскивание поля ctrlKey.И по умолчанию Leaflet boxZoom реагирует на перетаскивание окна shiftKey.Пока все хорошо.Однако при перетаскивании блока ctrlKey + shiftKey запускается окно Leaflet boxZoom и модуль выбора области.Я хотел бы, чтобы он вызывал только плагин выбора области.Есть предложения?

1 Ответ

2 голосов
/ 13 июня 2019

Если вы посмотрите на исходный код Leaflet для обработчика карты BoxZoom , вы можете увидеть строку, где он проверяет наличие нажатой клавиши Shift плюс первичная ("" left "") мышь /кнопка указателя, чтобы запустить масштабирование окна:

_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.На этом этапе рекомендуется прочитать о прототипном наследовании javascript и Leaflet, как обращаться с ООП .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...