解除绑定不起作用
unbind doesn't work
为什么我无法在 openlayers 3 中取消绑定事件?
我正在尝试以交互方式绘制圆圈。
对于解除绑定事件,我使用 map.un('click',function(){ ... });
M.on('click',function(e){
if(!$pec.hasClass('active')) { deactive(true); return false;}
if( !isDrawing ){
isDrawing = true;
var center = e.coordinate;
var circle = new ol.geom.Circle([center[0],center[1]],10000,'XY');
var feature = new ol.Feature(circle);
var vectorSource = new ol.source.Vector();
vectorSource.addFeature(feature);
c = new ol.layer.Vector({
source: vectorSource
});
c.circle=circle;
M.addLayer(c);
$('body').css('cursor','crosshair');
}
else {
isDrawing = false;
deactive(false);
$('body').css('cursor','default');
finishDraw('circle',c);
}
});
M.on('pointermove',function(e){
if(isDrawing){
c.circle.setRadius(distanceTo(c.circle.getCenter(),e.coordinate));
}
});
function deactive(all){
M.un('click',function(){ log('deactive click');});
M.un('pointermove',function(){});
if(c && all) M.removeLayer(c);
isDrawing = false;
}
如何解决?
我有更多这样的解除绑定,但都不起作用-.-
我认为这里发生的是您绑定事件的方法是匿名的。当你想解绑一个事件时,同样的方法必须作为参考发送。
尝试将您的函数声明为一个变量,然后在您的绑定和解除绑定操作中使用它。类似于:
var myFunc = function(e) {};
M.on('click', myFunc);
M.un('click', myFunc)
此外,函数本身在无界时不会被调用。这就是您的日志记录不起作用的原因。
为什么我无法在 openlayers 3 中取消绑定事件?
我正在尝试以交互方式绘制圆圈。
对于解除绑定事件,我使用 map.un('click',function(){ ... });
M.on('click',function(e){
if(!$pec.hasClass('active')) { deactive(true); return false;}
if( !isDrawing ){
isDrawing = true;
var center = e.coordinate;
var circle = new ol.geom.Circle([center[0],center[1]],10000,'XY');
var feature = new ol.Feature(circle);
var vectorSource = new ol.source.Vector();
vectorSource.addFeature(feature);
c = new ol.layer.Vector({
source: vectorSource
});
c.circle=circle;
M.addLayer(c);
$('body').css('cursor','crosshair');
}
else {
isDrawing = false;
deactive(false);
$('body').css('cursor','default');
finishDraw('circle',c);
}
});
M.on('pointermove',function(e){
if(isDrawing){
c.circle.setRadius(distanceTo(c.circle.getCenter(),e.coordinate));
}
});
function deactive(all){
M.un('click',function(){ log('deactive click');});
M.un('pointermove',function(){});
if(c && all) M.removeLayer(c);
isDrawing = false;
}
如何解决? 我有更多这样的解除绑定,但都不起作用-.-
我认为这里发生的是您绑定事件的方法是匿名的。当你想解绑一个事件时,同样的方法必须作为参考发送。
尝试将您的函数声明为一个变量,然后在您的绑定和解除绑定操作中使用它。类似于:
var myFunc = function(e) {};
M.on('click', myFunc);
M.un('click', myFunc)
此外,函数本身在无界时不会被调用。这就是您的日志记录不起作用的原因。