[英]Openlayers - display pacific markers popup using marker id and onclick event
[英]OpenLayers popup not responding to event
我有一個帶有標記的OpenLayers地圖和一個當我點擊標記時應該出現的彈出窗口。 這在IE8中工作正常,但在Firefox 3.6中沒有。 有什么想法嗎? 據我所知,mousedown事件沒有被解雇,因為我的日志消息沒有出現。 該地圖位於http://ndinfo.heroku.com/test.html ,我用來創建標記和彈出窗口的代碼是:
function addMarker() {
var map = g_waze_map.map;
var markers1 = new OpenLayers.Layer.Markers( "Markers1" );
g_waze_map.map.addLayer(markers1);
var size = new OpenLayers.Size(21,25);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png',size,offset);
var marker = new OpenLayers.Marker(new OpenLayers.LonLat(34.7934759272249, 32.0835554760902),icon);
markers1.addMarker(marker);
marker.events.register('mousedown', marker, function(evt) {
console.log('hi');
var popup = new OpenLayers.Popup.FramedCloud(null,
marker.lonlat,
null,
"<div style='background-color:red; width:150;height:100'>hi</div>",
null,true,null);
map.addPopup(popup);
OpenLayers.Event.stop(evt);
});
}
從這里回答。 關鍵是覆蓋OpenLayers.Control.ModifyFeature
的activate()
函數。 我沒有意識到在創建標記之前有一個控件會以任何方式影響標記,但事實證明它確實如此。
var shapes = new OpenLayers.Layer.Vector( "Shapes" );
map.addLayer(shapes);
var modifyControl = new OpenLayers.Control.ModifyFeature(shapes, {
activate: function() {
var activated = false;
if(OpenLayers.Handler.prototype.activate.apply(this, arguments)) {
this.map.events.on({
"removelayer": this.handleMapEvents,
"changelayer": this.handleMapEvents,
scope: this
});
activated = true;
}
return activated;
}
});
我認為該marker
沒有任何'mousedown'事件關聯。 但OpenLayers.Markers
可能有它。 試試這個:
// Create your markers layer
var markerLayer = new OpenLayers.Layer.Markers( "Markers1" );
// do whatever you want, and then...
// Create your marker
var marker = new OpenLayers.Marker(
new OpenLayers.LonLat(34.7934759272249, 32.0835554760902),
icon);
// Add your recently created marker to your markers layer
markerLayer.addMarker(marker);
// And bind 'mousedown' event to 'markers' layer, not to 'marker' object
markerLayer.events.register('mousedown', markerLayer, function(evt) {
console.log('hi');
var popup = new OpenLayers.Popup.FramedCloud(null,marker.lonlat,null,
"<div style='background-color:red; width:150;height:100'>hi</div>",
null,true,null);
map.addPopup(popup);
OpenLayers.Event.stop(evt);
});
這是一個小例子: http : //jsbin.com/ezeno3 (點擊地圖創建標記,然后點擊標記打開彈出窗口)。
我希望它有所幫助。 快樂的編碼!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.