我有一个带有多个WMS层的Openlayers3-map。我想添加一个按钮(对于每个可查询图层),以便用户可以决定是否查询wms层。
var getfeature = function(click) {
map.on(click, function (evt) {
document.getElementById('info').innerHTML = '';
var viewResolution = (view.getResolution());
var url = wms_url.getGetFeatureInfoUrl(
evt.coordinate, viewResolution, projection,
{
'INFO_FORMAT': 'text/html'
});
if (url) {
document.getElementById('info').innerHTML =
'<iframe seamless src="' + url + '"></iframe>';
}
});
}
到目前为止,这部分工作正常。
现在将getfeature-request与“user-interface”(这里只是一个复选框)结合起来
var userquery = function() {
var $input = $( this );
//checkbox true/false
if($input.prop("checked")) {
//change cursor appearance
map.getViewport().style.cursor = 'help';
//getfeature-request on singleclick
getfeature('singleclick');
}
else {
//change cursor appearance, when checkbox is unchecked
map.getViewport().style.cursor = '';
//WHAT TO DO HERE???
//...
}
};
带有id =“cursor10”
的复选框var checkbox = document.getElementById('cursor10');
并通过
添加功能checkbox.onchange = userquery;
此时,getfeature功能在激活后继续工作。
我需要做什么,因此当取消选中复选框时,getfeature函数将停止工作?或者对另一种方法的任何想法?
答案 0 :(得分:1)
您可以使用unByKey() function按键取消注册地图的事件监听器
请参阅:http://jsfiddle.net/d1wrkb95/2/
var mapEventKey;
var getfeature = function(click) {
mapEventKey = map.on(click, function (evt) {
document.getElementById('info').innerHTML = '';
var viewResolution = (view.getResolution());
var url = wms_url.getGetFeatureInfoUrl(
evt.coordinate, viewResolution, projection_to,
{
'INFO_FORMAT': 'text/html'
});
if (url) {
document.getElementById('info').innerHTML =
'<iframe seamless src="' + url + '"></iframe>';
}
});
};
var userquery = function() {
var $input = $( this );
//checkbox true/false
if($input.prop("checked")) {
//cursor ändern
map.getViewport().style.cursor = 'help';
//getfeatureabfrage bei einzelklick
getfeature('singleclick');
}
else {
map.unByKey(mapEventKey);
map.getViewport().style.cursor = '';
}
};