2015-02-15 2 views
0

У меня странная проблема с использованием событий векторных слоев. Здесь пропущено мой код:Проблемы с событиями OpenLayers, featureover и onselect

var options = { 
        projection : "EPSG:3857", 
        displayProjection : "EPSG:4326", 
        numZoomLevels : 18, 
      //after delete this part below of option everything works good 
        eventListeners: { 
         featureover: function(e) { 
         document.getElementById("output").innerHTML="ok'; 
       }}}; 
map = new OpenLayers.Map('map', options); 

w_parcels = new OpenLayers.Layer.Vector("PARCELS", { 
              styleMap : style_parcels, 
              projection : "EPSG:3857", 
              strategies : [ new OpenLayers.Strategy.Fixed() ], 
              protocol : new OpenLayers.Protocol.HTTP({ 
              url : "parcels.php", 
              format : new OpenLayers.Format.GeoJSON()}) 
              }); 


    map.addLayers([osm,w_parcels]); 

    selectControl = new OpenLayers.Control.SelectFeature(w_parcels, { 
         clickout: false, 
         multiple: true, 
         onSelect : onFeatureSelect, 
         onUnselect : onFeatureUnselect, 
         toggleKey: "ctrlKey" // ctrl key removes from selection 
        }); 

    selectControl.handlers.feature.stopDown = false; 
    map.addControl(selectControl); 
    selectControl.activate(); 
    map.addControl(new OpenLayers.Control.ScaleLine()); 

    function onFeatureSelect(feature) { 
      console.log('it works'); 
     } 

В этом коде события onselect dosen't работа всегда, когда я нажимаю на функцию на слое (иногда я должен сделать двойной щелчок).

Если удалить eventListeners из опций, то onselect отлично работает, я имею в виду всегда, когда я нажимаю функцию на слое.

Что не так в моем коде? Есть ли возможность разрешить этот конфликт между eventListeners a onselect?

ответ

1

Похоже, событие featureover маскирует элемент управления select, поскольку эта функция будет выполняться первой, пока вы select, так как вы должны навести указатель мыши над векторным слоем, щелкнув по нему. Но если функциональность ограничена select и mouse-over векторным слоем. Затем вы можете использовать что-то вроде:

eventListeners: { 
    featureover: function(e) { 
     //behavior for hover events 
    }, 
    featureout: function(e) { 
     //behavior for mouse out events 
    },      
    featureclick: function(e) { 
     //behavior for click events 
    } 
    } 

Надеюсь, это поможет.

+0

Спасибо! Возможно, это может быть хорошим решением, но у меня есть все логическое приложение, использующее onselect, где все связано со столами и т. Д., И используя информацию о нажатых клавишах ctrl, shift, measure area и distance. Это могло бы повредить все это :(Еще раз спасибо за интерес к моей проблеме. – Artik

Смежные вопросы