簡體   English   中英

如何在 OpenLayers.Map 上獲取`mousedown` 事件?

[英]How to get `mousedown` event on OpenLayers.Map?

我正在使用 OpenLayers 2.13。 我想在鼠標懸停在OpenLayers.Map上時檢測mousedownmousemovemouseup事件,所以我編寫了以下代碼。

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

在這里說支持mousemovemouseup但不支持mousedown 是否有任何技巧可以在不修改 OpenLayers 腳本的情況下應用來檢測mousedown事件?

將第四個參數添加為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事件永遠不會到達最后一個偵聽器。

如果沒有第四個參數, events.register()會將監聽器添加到事件監聽鏈的末尾。 使用第四個參數,它將添加到第一個參數。

如果您使用開放層 API > 5 那么我們可以使用以下代碼

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

    });

簡單的制作方法:

map.events.listeners.mousedown.unshift({ 
    func: function(){
        // code
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM