2017-08-15 12 views
1

ol.interaction.Drawを使用して、ポリゴンをopenlayersマップに追加しようとしています。私はまたスナップの対話を持っており、シフトを押さえている間はオフにするように設定しています。ol.interaction.Draw Open Layersでshift-clickイベントをキャッチ

const 
    snapInteraction = new ol.interaction.Snap({ 
    source: drawLayer.getSource() 
    }), 
    turnOnSnap = (evt) => { 
    if (!isShiftKey(evt)) { 
     return; 
    } 
    console.log('shift key is down, turning off snap'); 
    snapInteraction.setActive(false); 
    }, 
    turnOffSnap = (evt) => { 
    if (!isShiftKey(evt)) { 
     return; 
    } 
    console.log('shift key is up, turning on snap'); 
    snapInteraction.setActive(true); 
    }; 

document.addEventListener('keydown', turnOnSnap); 
document.addEventListener('keyup', turnOffSnap); 

これは、スナップを無効にするために機能します。しかし、Shiftキーを押したままでは、私のDraw相互作用は機能しません。 conditionのパラメータのデフォルト値はol.events.condition.noModifierKeysですが、私がカスタムを作るときにはconditionは決してヒットしません!

const drawInteraction = new ol.interaction.Draw({ 
    source: drawLayer.getSource(), 
    type: 'Polygon', 
    condition: function (evt) { 
    console.log("yo, why isn't this hit when I hold down shift?", evt); 
    return (ol.events.condition.noModifierKeys(evt) || 
     ol.events.condition.shiftKeyOnly(evt)); 
    } 
}); 

shiftInteractionがshift + clickイベントを無視するのはなぜですか?

答えて

1

freehandConditionのデフォルトでは、shift + clickイベントがキャッチされているため、conditionの評価が行われません。これを何か他のものに変更すると、shift + clickイベントがカスタム条件関数にヒットします。

const drawInteraction = new ol.interaction.Draw({ 
    source: drawLayer.getSource(), 
    type: 'Polygon', 
    condition: function (evt) { 
    return (ol.events.condition.noModifierKeys(evt) || 
     ol.events.condition.shiftKeyOnly(evt)); 
    }, 
    freehandCondition: ol.events.condition.never, // <-- add this line 
}); 
関連する問題