2017-01-30 13 views
0

У меня есть буксир ol.interaction.Select, один для одного клика, а другой для двойного щелчка.Нажмите и дважды щелкните мышью, отмените выбор взаимодействия 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 
} 

Но когда я хочу отменить выбор двойного щелчка, я должен дважды щелкнуть по карте. Можно ли отменить выбор в двойном щелчке одним щелчком мыши?

+0

Вы назначаете как двойной клик, так и функцию возврата, не имеет смысла, где вы его разместили. Должно ли оно находиться внутри функции стиля? Мы даже не знаем, как выглядит ваша карта, так что вы можете предоставить нам живой пример, чтобы мы могли вам помочь? – Icarus

+0

Да, это правда Икарус, моя ошибка, но ошибка продолжается. Когда я отменю выделение функции, выбранной с двойным щелчком, я должен отменить выбор двумя щелчками. –

ответ

0

В моей версии решения проблемы я использовал некоторую часть кода из @ahocevar Мое решение просто. Прежде всего, если существует какая-либо ссылка getFeature на это взаимодействие (selectDoubleClick), а затем очистите эти функции.

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

Лучше иметь прослушивание событий, если карта была нажата, а затем очистить функции.

1

Возможно, вы сможете это сделать, передав пользовательскую функцию как condition взаимодействия selectDoubleClick. Что-то, что проверяет выбранные функции и реагирует на двойной щелчок, если не выбраны никакие функции, и одним щелчком мыши, когда есть выбранные функции. Как это:

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

Да, я знаю, но не работал, что функция. Лучше было бы очистить функцию, выбранную этим взаимодействием –