Openlayers 返回dblclick Open图层上贴图的默认行为
单击一个按钮后,我覆盖了Openlayers 返回dblclick Open图层上贴图的默认行为,openlayers,Openlayers,单击一个按钮后,我覆盖了map.on('dblclick')的默认行为,即放大 我希望在代码的其他部分检索此行为 我该怎么做 编辑:为了更好的解释。我有一个按钮,当我单击它时,我会覆盖map dblclick上的行为 $('#RemoveArea').on('click', function(){ map.getInteractions().pop() map.on('dblclick', function(evt) { evt.preventDefault();
map.on('dblclick')
的默认行为,即放大
我希望在代码的其他部分检索此行为
我该怎么做
编辑:为了更好的解释。我有一个按钮,当我单击它时,我会覆盖map dblclick上的行为
$('#RemoveArea').on('click', function(){
map.getInteractions().pop()
map.on('dblclick', function(evt) {
evt.preventDefault();
evt.map.forEachFeatureAtPixel(evt.pixel, function(feature,layer){
featureId = feature.getId()
areaFeature = feature.getGeometry().getArea()/ 10000;
totalSelectedArea -= parseFloat(areaFeature.toFixed(2));
})
});
})
如何再次点击其他btn使地图的行为与以前一样,这是地图的缩放
$('#OtherBtn').on('click', function(){
//...
})
有可能吗?您可以在创建地图时禁用交互
var map = new ol.Map({
layers [myLayer],
target: 'map',
interactions: ol.interaction.defaults({doubleClickZoom: false}),
view: new ol.View({
center: [x, y],
zoom: z
})
});
要能够打开/关闭交互,您需要将其分配给变量,而不是使用默认值创建它:
var dcz = new ol.interaction.DoubleClickZoom();
var map = new ol.Map({
layers [myLayer],
target: 'map',
interactions: ol.interaction.defaults({doubleClickZoom: false}).extend([dcz]),
view: new ol.View({
center: [x, y],
zoom: z
})
});
要关闭和打开:
dcz.setActive(false);
dcz.setActive(true);
var layer=新建ol.layer.Tile({
来源:new ol.source.OSM()
});
var dcz=new ol.interaction.DoubleClickZoom();
var map1=新ol.Map({
目标:“地图”,
图层:[图层],
交互:ol.interaction.defaults({doubleClickZoom:false}).extend([dcz]),
视图:新ol.view({
中间:[0,0],
缩放:1
})
});
函数dczOnOff(){
setActive(document.getElementsByName('dcz')[1]。选中);
}
html,正文{
保证金:0;
填充:0;
宽度:100%;
身高:100%;
}
.地图{
宽度:100%;
身高:80%;
}
DCZ关闭
DCZ在
上,因此我没有找到在dblclick上检索缩放的方法,但我能够防止以前覆盖的行为。所以,在点击其他BTN之后
我加了这个
map.on('dblclick', function(evt){
evt.preventDefault();
})
正如我所说,它不会放大,但也不会做其他事情
编辑:我找到的函数是un
,它与on
相反。所以在OtherBtn
I设置
map.un('dblclick', doubleClickCallback);
其中,
doubleClickCallback
只是一个函数,包含了我在dblclick
之后所做的所有事情,然后返回到deafualt行为我可以知道问题出了什么问题吗?这是我需要的机会,我只想在特定情况下忽略行为,然后再回到原来的情况。我已经在回答中添加了这一点。但不幸的是,没有帮助。相反,我使用的是evt.preventDefault()dcz.setActive(false)
;单击$('#OtherBtn')
后,我添加了dcz.setActive(true)代码>,但previos行为仍在发生。我是做错了还是怎么了?它在处理上面的片段。我怀疑在事件触发后更改设置可能太晚,无法停止。我可以看到它可以工作,但对我来说仍然不起作用:(您需要打开最初设置的dblclick侦听器,而不是设置一个新的侦听器。或者您可以保持它的活动状态,并让它测试您是否更改了双击缩放。我已在我的答案中添加了更多示例,感谢@Mike参与我的问题,我没有检查您的解决方案,因为我发现了另一个。(请参阅上面的编辑)是的,使用带有un
的命名函数与使用来自未命名函数的键的unByKey
具有相同的效果。