停止在Control(传单)

时间:2016-06-04 09:31:17

标签: javascript jquery leaflet

我有一个带有自定义控件的地图,当我点击弹出窗口时会自动更改。

地图如下所示:Map with control

我的问题是,即使我的鼠标指针位于控件内,我也可以移动地图。对于未在图像中显示的滑块也会发生同样的情况。

我的控件的代码如下所示:

var info = L.control({position: "topleft"});

info.onAdd = function (map) {
    // create a div with a class "info"
    this._div = L.DomUtil.create('div', 'info');
    this.update();
    return this._div;
};

update()功能稍后通过info添加到info.update = ...

我的具体问题是:如何停止点击“点击”,拖动等事件来注册基础地图?

我在几个地方尝试了几件事,主要是L.DomEvent.disableClickPropagation(info)L.DomEvent.stopPropagation(e)。我也想要更改info.on("click", ...)方法,但似乎控件没有.on(),我发现它也很混乱。

我试图通过谷歌和SO找到答案。尝试了几种方法,但没有一种工作,与我对一般工作的混淆(似乎没有简单的+防弹方法)一起引导我发表我自己的问题。

总的来说,我似乎很困惑,我想知道:

  1. 活动如何与传单一起使用? (为什么所有人似乎都去了地图?)
  2. 如何访问元素? (在上述情况下,是.disableClickPropagation(info);还是var div = L.DomUtil.get(info); div.disable...还是var div = L.DomUtil.get("info"); div.disable...
  3. 我在http://jsfiddle.net/s8q35xhu/2/有一个最小的例子,它显示了如何设置信息框以及您可以在哪里看到问题。

    我希望我们能找到解决方案,并为传单事件传播带来清晰度。如果它最终奏效,我会很高兴。

    不过,这是我关于SO的第一个问题。关于帖子风格的反馈,我也很高兴:)

1 个答案:

答案 0 :(得分:7)

不确定这是否会导致您的问题,但对我来说,首先创建一个信息控件然后实例化它会有所帮助:

class Kernel
{
    shared_ptr<Window> window;
    shared_ptr<Dispatcher> dispatcher;
}

class Window
{
    weak_ptr<Dispatcher> dispatcher;
}

class Dispatcher
{}

请注意我添加的var InfoControl = L.Control.extend({ options: { position: "topleft" }, onAdd: function(map) { this._div = L.DomUtil.create('div', 'info'); L.DomEvent.disableClickPropagation(this._div); this.update(); return this._div; }, update: function(d) { this._div.innerHTML = '<h4>Job Infos</h4> Click on a popup'; } }); var info = new InfoControl().addTo(map); ,这会成功阻止地图通过信息控件拖动。 (demo

Leaflet中的活动。

事件转到地图,因为Leaflet是一个映射库,它是关于地图的。控件没有L.DomEvent.disableClickPropagation(this._div);方法,因为它们不会发出事件,控件中包含的DOM元素也可能,这就是你需要对控件的实际DOM元素进行.on()的原因。