我有一个带有标记的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);
});
}
解决方法:
here的答案.关键是重写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;
}
});
标签:openlayers,javascript 来源: https://codeday.me/bug/20191102/1994519.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。