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

Javascript Linux上OpenLayers 3中的拖动旋转交互,javascript,openlayers-3,Javascript,Openlayers 3,我想在Linux下运行的浏览器上使用OpenLayers 3。这允许在按住Alt和Ctrl键的同时通过拖动来旋转贴图。这在Windows上运行良好,但在Redhat 6u2和其他可能的发行版中不行,因为Alt键是为X-Windows拖动窗口行为保留的 首先,我使用ol.events.condition.shiftKeyOnly自定义了DragRotate,它工作正常,但与缩放框功能冲突,即旋转时绘制蓝色缩放框 var map = new ol.Map({ layers: [ ne

我想在Linux下运行的浏览器上使用OpenLayers 3。这允许在按住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
    })])
});
我想保留缩放框的shift拖动,并使用其他一些键/组合,可能是“R+shift”?我已经试着自定义条件。看我的

我在API中找不到任何关于实现自定义条件的内容,除了文件和文档。使用调试器,我在结构或嵌套的OriginaleEvent中找不到任何包含键码等的属性

  • 如何实现customCondition功能来检测在拖动过程中何时按下给定键
  • 有没有其他方法可以在Linux中实现拖动旋转

    • 这里有一个自定义条件-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
          })])
      });
      

      好问题。我会试试看,然后告诉你。
      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
          })])
      });