OpenLayers3入門篇-單擊事件
阿新 • • 發佈:2019-02-17
單擊事件的繫結
在OpenLayers的官方API中有專門的事件函式(ol.interaction),對於事件的繫結也比較方便,但OL沒有右鍵事件,繫結事件的物件是針對整個地圖物件,對相應的地圖層操作時需要對event物件深加工,需要進一步判斷和提取物件。
第一步:
var selectClick = new ol.interaction.Select({
condition: ol.events.condition.click,
style:changeStyle
});
首先建立一個ol.interaction.Select物件,然後指定相應的引數,condition是事件型別,style是時間發生時相應的物件改變的Style,
第二步:
var changeStyle = function(feature){
var ftype=feature.get("featuretype");
if(ftype=='line'){
return new ol.style.Style({
stroke:new ol.style.Stroke({
width:5,
color:'#9400D3'
})
});
}
};
注:在ol呼叫這個changeStyle函式的時候,會有一個預設的引數feature傳入,在後期對於
第三步:
map.addInteraction(selectClick);
selectClick.on("select",ClickEvent);
第一個addInteraction是將這個函式新增到map,單擊時就只會有樣式的改變,第二個是對這個函式功能的補充,單獨再繫結一個選中事件,即單機事件發生的同時,也促發這個選中事件呼叫ClickEvent函式並傳入event
程式碼如下:
function ClickEvent(e){
var arr=e.target;//獲取事件物件,即產生這個事件的元素-->ol.interaction.Select
var collection = arr.getFeatures();//獲取這個事件繫結的features-->返回值是一個ol.Collection物件
var features = collection.getArray();//獲取這個集合的第一個元素-->真正的feature
if(features.length>0){
var obj = features[0].getId();//獲取之前繫結的ID,返回是一個json字串
var jsonobj=eval("("+obj+")");//轉成json物件
alert(jsonobj.name);//獲取ID
業務邏輯...
}
}