2015-06-25 59 views
3

我想在Linux下運行的瀏覽器上使用OpenLayers 3 rotation interaction。這允許通過拖動同時按下Alt和Ctrl來旋轉地圖。這在Windows上工作正常,但不是在Redhat 6u2和其他發行版中,因爲Alt鍵被保留用於X-Windows拖動窗口行爲。在Linux上的OpenLayers 3中拖動旋轉交互

首先,我使用ol.events.condition.shiftKeyOnly定製了DragRotate,它可以工作,但與縮放框功能衝突,即在旋轉時繪製藍色縮放框。

var map = new ol.Map({ 
    layers: [ 
    new ol.layer.Tile({ 
     source: new ol.source.OSM() 
    })], 
    target: 'map', 
    view: new ol.View({ 
     center: [-25860000, 4130000], 
     zoom: 10 
    }), 
    interactions: ol.interaction.defaults().extend([new ol.interaction.DragRotate({ 
     condition: ol.events.condition.shiftKeyOnly 
    })]) 
}); 

我想保留移位拖累縮放框,並使用一些其他的鍵/組合,也許「R + Shift鍵」?我試圖自定義條件。看到我的有關實現比ol.eventsMapBrowserEvent文檔其他自定義條件的API中JSFiddle

var customCondition = function(mapBrowserEvent) { 
    return false; // TODO 
}; 

var map = new ol.Map({ 
    layers: [ 
    new ol.layer.Tile({ 
     source: new ol.source.OSM() 
    })], 
    target: 'map', 
    view: new ol.View({ 
     center: [-25860000, 4130000], 
     zoom: 10 
    }), 
    interactions: ol.interaction.defaults().extend([new ol.interaction.DragRotate({ 
     condition: customCondition 
    })]) 
}); 

我無法找到任何東西。使用調試器,我找不到在結構或包含一個鍵碼等任何屬性嵌套originalEvent

  • 我怎樣才能實現customCondition功能時,拖動過程中按下給定的鍵來檢測?
  • 有沒有實現一拖旋轉,在Linux的
+0

一個很好的問題。我會嘗試一些測試並讓你知道。 –

回答

2

這裏工作是一個自定義條件的任何其他方式 - 按Ctrl + Shift:

ol.events.condition.custom = function(mapBrowserEvent) { 
    var browserEvent = mapBrowserEvent.originalEvent; 
    return (browserEvent.ctrlKey && browserEvent.shiftKey); 
}; 

var map = new ol.Map({ 
    layers: [ 
    new ol.layer.Tile({ 
     source: new ol.source.OSM() 
    })], 
    target: 'map', 
    view: new ol.View({ 
     center: [-25860000, 4130000], 
     zoom: 10 
    }), 
    interactions: ol.interaction.defaults().extend([new ol.interaction.DragRotate({ 
     condition: ol.events.condition.custom 
    })]) 
});