如何在OpenLayers.Map上获得`mousedown`事件?

时间:2013-06-29 10:29:03

标签: javascript openlayers

我正在使用OpenLayers 2.13。我希望在鼠标超过mousedown时检测到mousemovemouseupOpenLayers.Map事件,因此我编写了以下代码。

var map = new OpenLayers.Map("map",{controls:[
    new OpenLayers.Control.Navigation(),
    new OpenLayers.Control.ArgParser(),
    new OpenLayers.Control.Attribution()
]});
var events = map.events;
events.register("mousedown",map,function(e){
    console.log("mousedown");
});
events.register("mousemove",map,function(e){
    console.log("mousemove");
});
events.register("mouseup",map,function(e){
    console.log("mouseup");
});

因此,检测到mousemovemouseup但未检测到mousedown

here表示支持mousemovemouseupmousedown不支持mousedown。我是否可以应用任何黑客来检测{{1}}事件而不修改OpenLayers脚本?

4 个答案:

答案 0 :(得分:8)

将第4个参数添加为true

var events = map.events;
events.register("mousedown",map,function(e){
    console.log("mousedown");
    return true;
},true); // This argument is new

有几个事件监听器已经在监听mousedown事件。当检测到[map drag start]时,其中一个会吃掉事件,因此mousedown事件永远不会到达最后一个监听器。

如果没有第4个参数,events.register()会将监听器添加到事件监听链的末尾。使用第4个参数,它会将它添加到第一个参数。

答案 1 :(得分:2)

还有一个registerPriority(),它添加到列表的前面:

http://dev.openlayers.org/docs/files/OpenLayers/Events-js.html#OpenLayers.Events.registerPriority

答案 2 :(得分:0)

简单的方法:

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

答案 3 :(得分:0)

如果你使用 open layer API > 5 那么我们可以使用下面的代码

 map.on('pointerdown', function(){
      console.log("mousedown");

    });
相关问题