Jac*_*ian 6 javascript openlayers-3
我在stackoverflow上复制了我的问题,因为在gis.stackexchange中我的所有问题都没有引起任何注意 - 很多时候我无法得到简单问题的答案.那么,我现在的问题是如何删除以这种方式定义的侦听器:
map.getViewport().addEventListener('click', function (e){
console.log("clicked");
});
Run Code Online (Sandbox Code Playgroud)
Ale*_*ubé 14
OL3会引发您可以使用的各种事件,并且为了回答您的原始问题,可以轻松快捷地注销它们.
请看这个例子:http://openlayers.org/en/v3.13.0/examples/vector-layer.html
更具体地说,在这些方面:
map.on('pointermove', function(evt) {
if (evt.dragging) {
return;
}
var pixel = map.getEventPixel(evt.originalEvent);
displayFeatureInfo(pixel);
});
map.on('click', function(evt) {
displayFeatureInfo(evt.pixel);
});
Run Code Online (Sandbox Code Playgroud)
该ol.Map对象有一个on方法可用于在ol3地图浏览器事件上注册事件侦听器.最好使用这些事件而不是标准的浏览器事件.在此处查看所有地图浏览器事件的列表:http://openlayers.org/en/v3.13.0/apidoc/ol.MapBrowserEvent.html
要取消注册,您可以:
a)使用该un方法,但要确保提供与第二个参数相同的回调方法.换一种说法:
var callback = function(evt) {
displayFeatureInfo(evt.pixel);
};
map.on('click', callback);
map.un('click', callback);
Run Code Online (Sandbox Code Playgroud)
b)另一种方法是使用ol.Observable.unByKey我喜欢的方法.调用on或时once,它返回引用该事件的键.然后,您可以使用该键取消活动:
var key = map.on('click', function(evt) {
displayFeatureInfo(evt.pixel);
});
ol.Observable.unByKey(key);
Run Code Online (Sandbox Code Playgroud)
我发现b)更友好,因为你可以注册一堆事件监听器并将所有密钥放在一个数组中.如果要取消全部注册,请在数组中循环并调用unByKey方法,然后清空数组.它生成的代码少于手动取消注册所有事件的代码.
| 归档时间: |
|
| 查看次数: |
3765 次 |
| 最近记录: |