18

当我单击 CircleMarker 对象时,我试图禁用地图上的缩放,但直到现在,还没有成功。

这是我的代码:

var myCircle = new L.CircleMarker(new L.LatLng(50.924480, 10.758276), 10).addTo(map);
myCircle.on("click", function () {
    //my click stuff
});
myCircle.on("dblclick", function () {
    //my dblclick stuff
});

每次触发 dblclick 事件时,地图都会缩放,如何禁用它?

4

8 回答 8

30

尝试

var myCircle = new L.CircleMarker(new L.LatLng(50.924480, 10.758276), 10).addTo(map);
map.doubleClickZoom.disable(); 

参考这个文件

于 2013-03-14T10:59:40.600 回答
3

以下解决方案似乎对我有用:

myCircle.ondblclick = function (event) {
    event.stopPropagation();
    return false;
};

我还尝试了另一种方法,它在实践中也很有效,但我觉得它有点 hacky:

myCircle.on("click", function () {
  map.doubleClickZoom.disable();
  setTimeout(function(){map.doubleClickZoom.enable();}, 1000);
});
于 2018-05-17T07:37:18.970 回答
2

如果有人在这里寻找用例的解决方案“我想在双击时放大地图,但如果双击发生在实体上则不是”,这就是我解决它的方法:

const circle = new L.circlemarker(...).addTo(map);
circle.on("dblclick", () => {
  map.doubleClickZoom.disable();

  doSomething();

  setTimeout(() => {
    map.doubleClickZoom.enable();
  }, 1); // Without the timeout the map will still zoom in on entity double-click
});

仅供参考event.preventDefault(); event.stopPropagation();,并且return false;在“dblclick”处理程序内部对我不起作用。

于 2019-09-23T13:20:39.753 回答
1

这里的所有答案都是在初始化 Leaflet 地图对象之后。

我想说明您也可以在地图对象初始化期间禁用 doubleClickZoom。

注意:这将禁用 doubleClickZoom 到整个地图,而不仅仅是 circleMarkers。

map = L.map('map', {
      center: [39.8282, -98.5795],
      zoom: 5,
      doubleClickZoom: false
    });

PS我正在运行传单版本1.7.1

于 2020-09-07T01:55:55.940 回答
0

您可以return false从您的 dblclick 处理程序中阻止事件传播,例如

myCircle.on("dblclick", function () {
    //my dblclick stuff
    return false;
});

现在其他元素(例如地图)将无法处理该事件

于 2015-06-03T02:30:59.827 回答
0

试试这个...当您将鼠标悬停在圆圈上时禁用 map.doubleClickZoom 并在您离开时启用

var myCircle = new L.CircleMarker(new L.LatLng(50.924480, 10.758276), 10).addTo(map);

myCircle
    .on("click", function () {
        //my click stuff
    })
    .on("dblclick", function () {
        //my dblclick stuff
    })
    .on('mouseover', function () {
        map.doubleClickZoom.disable();
    })
    .on('mouseout', function () {
        map.doubleClickZoom.enable();
    });
于 2020-02-11T15:07:36.987 回答
0

上面的答案都不适合我:

  • 调用本机ev.originalEvent.preventDefault()什么也没做
  • false既不返回
  • 我不太喜欢这种doubleClickZoom解决方法(尽管……它有效!)

使用Leaflet DomEvent为我完成了这项工作:


import { DomEvent } from 'leaflet';

myFeature.on("dblclick", function (ev) {
  DomEvent.stopPropagation(ev)
});
于 2021-08-06T15:17:33.430 回答
-2

首先,您需要禁用地图双击缩放,然后在地图点击事件中再次启用它。因此,当您在双击标记后双击地图时,它会再次缩放;)我试过了,它对我来说非常有用!享受!

map.doubleClickZoom.disable();

map.on('click', function (e) { 
  map.doubleClickZoom.enable();
 });
于 2013-11-08T19:48:38.343 回答