将事件委托给OSM

时间:2012-10-19 12:14:54

标签: javascript jquery events openlayers openstreetmap

我正在尝试为打开的街道地图制作图像叠加层。它看起来像这样:

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

2 个答案:

答案 0 :(得分: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/

答案 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了解工作解决方案