我有一个带有自定义控件的地图,当我点击弹出窗口时会自动更改。
地图如下所示: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找到答案。尝试了几种方法,但没有一种工作,与我对一般工作的混淆(似乎没有简单的+防弹方法)一起引导我发表我自己的问题。
总的来说,我似乎很困惑,我想知道:
.disableClickPropagation(info);
还是var div = L.DomUtil.get(info); div.disable...
还是var div = L.DomUtil.get("info"); div.disable...
我在http://jsfiddle.net/s8q35xhu/2/有一个最小的例子,它显示了如何设置信息框以及您可以在哪里看到问题。
我希望我们能找到解决方案,并为传单事件传播带来清晰度。如果它最终奏效,我会很高兴。
不过,这是我关于SO的第一个问题。关于帖子风格的反馈,我也很高兴:)答案 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是一个映射库,它是关于地图的。控件没有L.DomEvent.disableClickPropagation(this._div);
方法,因为它们不会发出事件,控件中包含的DOM元素也可能,这就是你需要对控件的实际DOM元素进行.on()
的原因。