4

我正在使用 OpenLayers 2.13。我想在鼠标悬停时检测mousedown, mousemove,事件,所以我编写了以下代码。mouseupOpenLayers.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");
});

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

在这里mousemove并且mouseup支持但mousedown不支持。mousedown在不修改 OpenLayers 脚本的情况下,我可以应用任何技巧来检测事件吗?

4

4 回答 4

8

将第四个参数添加为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()会将侦听器添加到事件侦听链的末尾。使用第四个参数,它将添加到第一个参数。

于 2013-06-29T13:59:50.147 回答
2

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

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

于 2013-09-17T13:44:56.190 回答
0

如果您使用开放层 API > 5,那么我们可以使用以下代码

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

    });
于 2021-03-28T13:13:10.060 回答
-1

制作它的简单方法:

map.events.listeners.mousedown.unshift({ 
    func: function(){
        // code
    }
});
于 2013-07-24T11:23:39.347 回答