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
具有相同的效果。