我正在使用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");
});
因此,检测到mousemove
和mouseup
但未检测到mousedown
。
here表示支持mousemove
和mouseup
但mousedown
不支持mousedown
。我是否可以应用任何黑客来检测{{1}}事件而不修改OpenLayers脚本?
答案 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");
});