在Linux上的OpenLayers 3中拖动旋转交互

时间:2015-06-25 12:06:35

标签: javascript openlayers-3

我想在Linux下运行的浏览器上使用OpenLayers 3 rotation interaction。这允许在按住Alt和Ctrl的同时通过拖动来旋转地图。这适用于Windows,但不适用于Redhat 6u2以及其他发行版,因为Alt键保留用于X-Windows拖动窗口行为。

首先,我使用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”?我试图定制条件。查看我的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
    })])
});

我在API中找不到有关实现ol.eventsMapBrowserEvent文档之外的自定义条件的任何内容。使用调试器我找不到结构中的任何属性或包含键码等的嵌套originalEvent。

  • 如何实现customCondition函数以检测拖动过程中按下给定键的时间?
  • 是否有其他方法可以实现适用于Linux的拖动

1 个答案:

答案 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
    })])
});