2016-07-25 5 views
3

Я пытаюсь активировать взаимодействие, когда мышь находится внутри какой-либо функции.Openlayers 3 - Interaction and pointermove

Он работает так ... проблема в том, что если вы медленно двигаете мышью, то взаимодействие продолжает действовать.

Является ли это ошибкой OL3, или мне нужно по-другому?

Код: http://jsfiddle.net/gmaq54dm/3/

olMap.on("pointermove", function (e) { 
    if (e.dragging) { 
     return; 
    } 
    var map = e.map; 
    console.log(e.pixel); 
    var feature = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) { 
     return feature; 
    }); 
    var hit = (feature) ? true : false; 
    console.log(hit); 
    olDraw.setActive(hit); 
}); 

Благодаря

+0

Это похоже на ошибку. Вы можете сообщить об этом основным разработчикам. –

+0

Я бы обернул последнюю строку в вызове 'setTimeout', поэтому он вызывается после обработки события pointermove:' window.setTimeout (function() {olDraw.setActive (hit);}, 0); ' – ahocevar

ответ

2

Это ошибка в приложении, а не в OpenLayers. Вам нужно убедиться, что вы только обнаруживаете объекты с помощью векторного слоя, а не из слоя ничьей. Измените forEachFeatureAtPixel функцию

var feature = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) { 
    return feature; 
}, null, function(layer) { 
    return layer == vectorLayer 
}); 

Последний аргумент добавляет слой фильтр только хит-обнаружения функции на векторном слое.

Обновлено, работая JSFiddle: http://jsfiddle.net/gmaq54dm/4/

+0

Thanks Andreas !!! Он отлично работает !!! –

0

Я согласен с @jonatas, это, кажется, ошибка.

Хотя, есть обходное решение, которое, похоже, выполняет вашу работу.

  1. Избегайте многострочной строки. Это делает сложнее для ol3 проверять, когда ваша мышь находится над этой функцией.
  2. Используйте vectorSource.forEachFeatureInExtent(, а затем создайте небольшой прямоугольник с помощью координат мыши и добавьте пару метров по всем направлениям. Это позволит убедиться, что ваша мышь «mbr» попадает в функции. Обратите внимание, что я использовал + -5 метров от координаты мыши, чтобы построить mbr. Вы должны приспособиться, чтобы удовлетворить свое требование.

Проверьте fiddle here

+0

Nice! !! Я собираюсь попробовать это. Thanks –