Если вы посмотрите на исходный код 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, как обращаться с ООП .