我正在尝试为打开的街道地图制作图像叠加层。它看起来像这样:
preview http://www.wildurb.at/urbwalker-app/preview.png
我遇到的问题是我不能通过图像的透明区域委托事件。
以下是我尝试用来触发事件的代码:
<img id="overlay" style="position:absolute;" src="overlay.png"/>
<div id="map"></div>
#overlay {
position:absolute;
}
#map {
position:absolute;
width:300px;
height:300px;
}
initMap();
$('#overlay').bind({
'mousedown' : function(event) {
event.preventDefault(); //no image dragging
$('#OpenLayers.Map_4_OpenLayers_ViewPort').trigger(event);
}
}
$('#OpenLayers.Map_4_OpenLayers_ViewPort').bind('mousedown', function(event) {
console.log(event);
}
mousedown永远不会被解雇,我不知道在这里使用哪个选择器 有没有办法将叠加层上发生的所有事件传递给地图?
提前致谢
最好的问候混乱
----编辑---
我创建了fiddle
答案 0 :(得分:1)
使用bind
api,如下所示。然后它会触发鼠标按下
$('#overlay').bind('mousedown',function(event) {
alert("overlayfired");
event.preventDefault(); //no image dragging
$('#OpenLayers.Map_4_OpenLayers_ViewPort').mousedown();
}
);
答案 1 :(得分:0)
我发现可以使用指针事件:无;用于chrome firefox和safarie以及用于ie和opera的svg的解决方法
var map;
$(document).ready(function() {
map = new OpenLayers.Map('map');
layer = new OpenLayers.Layer.OSM("Simple OSM Map");
map.addLayer(layer);
map.setCenter(
new OpenLayers.LonLat(-71.147, 42.472).transform(
new OpenLayers.Projection("EPSG:4326"),
map.getProjectionObject()),
12
);
if($.browser.msie || $.browser.opera) {
var over = '<svg id="overlay"><image width="300" height="300" xlink:href="overlay.png"></image></svg>';
} else {
var over = '<img id="imgOverlay" src="overlay.png"/>';
}
$('body').append(over);
});
查看此fiddle了解工作解决方案