2012-10-19 87 views
0

我正在尝试为开放式街道地图制作图像叠加层。它chould是这个样子:将活动委托给OSM

preview http://www.wildurb.at/urbwalker-app/preview.png

的问题IM面对的是,我无法通过图像的transperant区域委派的事件。

这里是我试图用触发事件的代码:

<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); 
    } 

鼠标按下永远不会解雇,林不知道该选择在这里使用 有没有办法通过所有的电子邮件叠加到地图上的通风口?

在此先感谢

问候混乱

----编辑---

我创建了一个fiddle

回答

0

我发现了一个可以使用指针的事件:无;镀铬Firefox和safarie与SVG一种解决方法IE和Opera

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的工作液

1

使用bind API像下面。那么触发鼠标按下

$('#overlay').bind('mousedown',function(event) { 
       alert("overlayfired"); 
       event.preventDefault(); //no image dragging 
       $('#OpenLayers.Map_4_OpenLayers_ViewPort').mousedown(); 
     } 
); 

参考:http://api.jquery.com/bind/

演示:http://jsfiddle.net/KwLce/

+0

鼠标按下触发上覆盖没有问题,你只是用另一种语法结合......但如何将其委托给底层地图,以便它可以放大移动等等 – ChaosClown

+0

您的元素中没有“OpenLayers”ID – YogeshWaran

+0

初始化地图将加载地图并应提供元素$('#OpenLayers.Map_4_OpenLayers_ViewPort') – ChaosClown