2017-01-30 6 views
0

私はトウを持っていますol.interaction.Selectを1回クリックするともう1回ダブルクリックします。をクリックしてダブルクリックして、インタラクションの選択を解除します。OpenLayers 3

var selectDoubleClick = new ol.interaction.Select({ 
    multi: true, 
    condition: ol.events.condition.doubleClick, 
    style: function(feature) { 
     //stuff here; 
    } 
    return feature; 
} 

selectDoubleClick.on('select',function(event) { 
    //stuff here 
} 

var selectSingleClick = new ol.interaction.Select({ 
    multi: true, 
    condition: ol.events.condition.singleClick, 
    style: function(feature) { 
     //stuff here 
    } 
    return feature; 
} 

selectSingleClick.on('select',function(event) { 
    //stuff here 
} 

しかし、ダブルクリックの選択を解除するには、地図で2回クリックする必要があります。ワンクリックでダブルクリックを解除する方法はありますか?

+0

ダブルクリックには両方を割り当て、 'return feature;'はどこに置いたのか分かりません。それはスタイル関数の中にあるべきですか?あなたのマップがどのように見えるのかわからないので、私たちがあなたのために生き生きとした例を提供できますか? – Icarus

+0

はい、真のイカルス、私の間違いですが、エラーは続いています。ダブルクリックで選択した機能を選択解除すると、2回のクリックで選択解除する必要があります。 –

答えて

0

:このように。まず、このインタラクション(selectDoubleClick)へのgetFeatureリンクが存在すれば、この機能をクリアします。

var concludeClickEdit = function(eventListener) { 
    if(selectDoubleClick.getFeatures().getLength() !== 0){ 
      selectDoubleClick.getFeatures().clear(); 
      } 
} 

マップがクリックされたときにイベントをリスニングして機能をクリアする方がよいでしょう。

1

カスタム関数をconditionとしてselectDoubleClickという対話で渡すことで、そうすることができます。選択された機能をチェックし、機能が選択されていない場合はダブルクリックに反応し、選択された機能がある場合はシングルクリックする機能です。私は私の解決策は単純です@ahocevar からのコードの一部を使用し、問題を解決するの私のバージョンで

condition: function(mapBrowserEvent) { 
    if (selectDoubleClick.getFeatures().getLength() == 0) { 
    return mapBrowserEvent.type == 'dblclick'; 
    } else { 
    return mapBrowserEvent.type == 'singleclick'; 
    } 
} 
+0

verry mutch @ahocevarありがとうございましたが、マップブラウザ(mapBrowserEvent)から常に値を読み取っているので、その方法は最善の方法ではありません。 –

+0

あなたは何を意味するのか分かりません。 'mapBrowserEvent'は、相互作用によって条件関数に渡されます。 – ahocevar

+0

はい私は知っていますが、その機能は動作しませんでした。その相互作用によって選択された機能をクリアする方が良い –

関連する問題