Leaflet 控制键激活时禁用boxZoom

Leaflet 控制键激活时禁用boxZoom,leaflet,Leaflet,我正在使用插件。默认情况下,它响应ctrlKey框拖动。默认情况下,传单框Zoom响应Shift键框拖动。到目前为止一切都很好。但是,ctrlKey+shiftKey框拖动会触发传单框缩放和区域选择插件。我希望它只触发区域选择插件代替。有什么建议吗?如果您看一下,您可以看到一行,它检查按下的shift键加上主(“左”)鼠标/指针按钮以启动框缩放: _onMouseDown: function (e) { if (!e.shiftKey || ((e.which !== 1) &&

我正在使用插件。默认情况下,它响应ctrlKey框拖动。默认情况下,传单框Zoom响应Shift键框拖动。到目前为止一切都很好。但是,ctrlKey+shiftKey框拖动会触发传单框缩放和区域选择插件。我希望它只触发区域选择插件代替。有什么建议吗?

如果您看一下,您可以看到一行,它检查按下的shift键加上主(“左”)鼠标/指针按钮以启动框缩放:

_onMouseDown: function (e) {
    if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
您希望将其更改为检查,以便在框缩放设置为
true
时不会启动,例如:

    if (!e.shiftKey || e.ctrlKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
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
prototype中对该方法进行修补,同时保留对旧方法的引用,例如:

    if (!e.shiftKey || e.ctrlKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
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的内容,此时建议阅读。

如果您查看,您可以看到一行,其中它检查按下的shift键加上主(“左”)鼠标/指针按钮以启动框缩放:

_onMouseDown: function (e) {
    if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
您希望将其更改为检查,以便在框缩放设置为
true
时不会启动,例如:

    if (!e.shiftKey || e.ctrlKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
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
prototype中对该方法进行修补,同时保留对旧方法的引用,例如:

    if (!e.shiftKey || e.ctrlKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
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的内容,这一点是推荐的。

Nice。关于在实例化之前修改原型和保存原始版本的提示非常有用。很好。关于在实例化之前修改原型和保存原始版本的提示非常有用。