首页 文章

OpenLayers event.register没有注册

提问于
浏览
5

好的,我是OpenLayers的菜鸟 . 我遇到的问题是......

在我的javascript中,在初始化 Map 后,添加基础OSM层并居中,我的代码执行ajax查找点以便添加到 Map 的标记,所有标记都在组中,因此它为每个组创建一个新图层将标记添加到组图层 . 但是,在将标记添加到图层之前,它会使用简单的警报功能执行mousedown事件寄存器 .

这里的问题是,当我点击一个标记时,光标只是转向一只手,就像它认为我想拖动 Map 一样 . 这就像顶部有一些其他层阻止了点击 . 我尝试使用控制台日志而不是警报,但确实从未实际触发事件点击 . 很难做一个代码示例来显示代码的完整图片,但这里有一个代码片段:

function createMarker(lat, lon) {
    var icon = new OpenLayers.Icon('/mapicon/icon-b.png', new OpenLayers.Size(12, 20), new OpenLayers.Pixel(-6, -10)); // this is a custom image
    lonlat = new OpenLayers.LonLat(lon, lat);
    var marker = new OpenLayers.Marker(lonlat, icon.clone());
    return marker;
}

marker = createMarker(lat,lon,'Example Title');
marker.events.register('mousedown', pin, function(evt) { alert('help!'); OpenLayers.Event.stop(evt); });

我正在撞墙,如果我不是秃头,我会把头发拉出来 . 有人有主意吗?

5 回答

  • 2

    试试这个:

    function createMarker(lat, lon) {
        var icon = new OpenLayers.Icon('/mapicon/icon-b.png', new OpenLayers.Size(12, 20), new OpenLayers.Pixel(-6, -10));
        lonlat = new OpenLayers.LonLat(lon, lat);
        var marker = new OpenLayers.Marker(lonlat, icon.clone());
        return marker;
    }
    
    marker = createMarker(lat,lon,'Example Title');
    marker.events.register('mousedown', marker, function(evt) {
       alert('help!');
    });
    

    register函数的第二个参数应该是您要绑定事件的对象 . 我总是想到OpenLayers.Map对象的mouseover事件示例:

    map = new OpenLayers.Map('divmap');
    map.events.register('mouseover', map, function(evt) {
       // Do stuff
    });
    

    我希望它对你有所帮助 . 快乐的编码!

  • 4

    谢谢大家的帮助 . 问题是(并且OL文档非常可悲,因此它没有在任何地方说明这一点)它与创建图层的顺序有关 . 在我的代码中,我遍历一个图层名称数组,我正在为每个名称创建一个标记图层和一个矢量图层 . 我尝试先创建标记图层,然后再创建矢量图层,它具有相同的点击瘫痪效果 . 所以我尝试循环一次以创建所有矢量图层 . 循环再次创建标记图层并且工作正常 .

    OL是一个很棒的 Map 系统 . 他们的文档很差,真是太遗憾了 . 样品几乎没用 . 如果OL是这样一个社区驱动的东西,为什么没有OL论坛?我不得不来这里,因为它似乎是唯一一个OL用户做任何发布的地方 .

  • 4

    也许你应该研究一下层事件 . 我假设你正在为你的积分使用矢量图层?在这种情况下,请查看关于事件处理的Vector layer documentation .

    具有应该接收鼠标事件的不同层应该有效 .

    另外,请查看OL页面上的this sample .

    对不起,如果我说明显了,你已经尝试过了 .

    编辑:

    从你的答案中意识到你可能想看一下this question,我问过,后来用OL黑客回答 . 也许你可以从中汲取一些东西 .

  • 2

    我有同样的问题,我想我找到了解决方案:

    看看这个:Capture feature events on different layers

    问题似乎是你不能同时在不同的层上听不同的事件,你只能在活动层中做 .

    PS:我还没试过......

  • 10

    简单的方法:

    map.events.listeners.mousedown.unshift({ 
        func: function(){
            alert('hola muheres');
        }
    });
    

    只是替换你想要的事件而不是“mousedown”

相关问题