2016-02-10 70 views
0

我需要檢測mousedown和mouseup事件,並在Openlayers 3地圖上獲取它們的座標,但它似乎根本無法工作,而且我無法在文檔。Openlayers 3中的Mousedown/Mouseup事件

map.on('click', function(ev){ console.log(ev.coordinate);}); 

作品就好了,並得到了正確的位置,但是當我更換「咔噠」與「的mousedown」它不工作了(我沒有得到任何錯誤,只是沒有任何反應)。

另一種解決方案是使用類似:

$(map.getViewport()).bind("mousedown", function(e) { }); 

但我似乎不能用這種方法得到的座標了。我發現了map.getEventPixel(e),有沒有什麼辦法將它轉換爲地圖上的實際座標? LE:我真正需要的是獲得點擊持續時間(就像有人將鼠標按住幾秒鐘一樣),所以如果有一種方法沒有mousedown/mouseup,我會採取任何建議。

回答

0

OpenLayers ol.Map對象包含事件,如clicksingleclick,可以使用on方法來偵聽。看到這裏的列表(查找「活動」):http://openlayers.org/en/v3.13.1/apidoc/ol.MapBrowserEvent.html

見使用的例子:http://openlayers.org/en/v3.13.1/examples/popup.html和片段(看到evt參數包含coordinate你正在尋找:

/** 
    * Add a click handler to the map to render the popup. 
    */ 
    map.on('singleclick', function(evt) { 
    var coordinate = evt.coordinate; 
    var hdms = ol.coordinate.toStringHDMS(ol.proj.transform(
     coordinate, 'EPSG:3857', 'EPSG:4326')); 

    content.innerHTML = '<p>You clicked here:</p><code>' + hdms + 
     '</code>'; 
    overlay.setPosition(coordinate); 
    }); 

您可能還有興趣閱讀如何取消偵聽這些事件:How to delete a listener in OpenLayers 3

+0

感謝您的快速回復,但我需要單獨檢測mousedown和mouseup事件(它在openlayers 2中支持,但根據此頁面http://openlayers.org/en/v3.5.0/apidoc/ol.Map.html doe似乎沒有工作了)。所以我想知道有沒有人想出辦法做到這一點。 –

+2

你可以嘗試'pointerup'和'pointerdown'事件。請參閱:https://github.com/openlayers/ol3/blob/v3.13.1/src/ol/mapbrowserevent.js#L479 –

+0

謝謝你,pointerup和pointerdown正是我所需要的,他們似乎在兩個方面都工作得很好個人電腦和觸摸屏。你可以添加這個作爲一個單獨的答案,所以我可以將問題標記爲答案? –