2017-11-29 15 views
0

Shiftキーを押しながらmouseWheelZoomで地図を拡大するだけです。 しかし、ol.interaction.MouseWheelZoomオプションには条件が含まれていません。ただし、handleEvent()メソッドがあります。MouseWheelZoomをopenlayers3でShiftキーを押しながらのみ適用する方法

シフトキーだけを押すと、ol.events.condition.shiftKeyOnly(mapBrowserEvent)がtrueを返すことがわかります。

handleEvent()メソッドをどのようにオーバーライドできますか?

使用してtypescriptです:

export class ShiftMouseWheelInteraction extends ol.interaction.MouseWheelZoom { 

    public handleEvent = function(evt){ 
     if (ol.events.condition.shiftKeyOnly(evt) === true) { 
      return ol.interaction.MouseWheelZoom.handleEvent(evt); 
     } 
     else { 
      return false; 
     } 
    } 
} 

は、その後、私はマップにこの相互作用を追加し、デフォルトの相互作用としてMouseWheelZoomを有効に追加します。

this.map = new ol.Map({ 
     layers: layers, 
     interactions: ol.interaction.defaults({ 
      mouseWheelZoom: true 
     }) 
    }); 
    this.map.addInteraction(shiftMouseWheelInteraction); 

地図をズームしていませんか?

ol.interaction.MouseWheelZoomはol.interaction

塩基相互作用コンストラクタはのhandleEventオプションを持って延びるが、サブクラスは、塩基相互作用には、このパラメータを渡すことはできません。

ol.interaction.MouseWheelZoom = function(opt_options) { 

    ol.interaction.Interaction.call(this, { 
    handleEvent: ol.interaction.MouseWheelZoom.handleEvent 
    }); 

答えて

1

これは、デフォルトの動作を妨げるイベントリスナーを使用して解決しました。

map.on('wheel', function(evt) { 
    wheelZoomHandler(evt); 
}); 
wheelZoomHandler(evt) { 
     if (ol.events.condition.shiftKeyOnly(evt) !== true) { 
      evt.browserEvent.preventDefault(); 
     } 
    } 
関連する問題