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

Izu*_*ima 4 javascript openlayers

我正在使用OpenLayers 2.13.我想检测mousedown,mousemove,mouseup事件,而鼠标在OpenLayers.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");
});
Run Code Online (Sandbox Code Playgroud)

结果,mousemove并且mouseup被检测到但没有mousedowns.

在这里mousemove并且mouseup得到支持但mousedown不是.在mousedown没有修改OpenLayers脚本的情况下,是否可以应用任何黑客来检测事件?

Izu*_*ima 8

添加第4个参数为true.

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

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

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