[OpenLayers-Users] click/hover select controls on one layer

Robert Marianski rmarianski at openplans.org
Mon Feb 22 10:53:26 EST 2010


On Sun, Feb 21, 2010 at 02:45:47PM -0500, Andreas Hocevar wrote:
> Hi Rob,
> 
> you have run into a common OpenLayers annoyance: controls with mouse
> handlers involved have different behavior, depending on the order
> they are added, activated. To make your example work, you just have
> to change the order of your SelectFeature controls to look like
> this:
> 
>        //*
>        map.addControl(selectControlHover);
>        selectControlHover.activate();
>        /**/
> 
>        map.addControl(selectControlClicks);
>        selectControlClicks.activate();
> 
> 
> Regards,
> Andreas.

That indeed worked for me. Thanks!

Robert

> Robert Marianski wrote:
> >On Thu, Feb 18, 2010 at 07:01:57PM +0100, Andreas Hocevar wrote:
> >>Andreas Hocevar wrote:
> >>>Hi Rob,
> >>>
> >>>Robert Marianski wrote:
> >>>>I want to be able to handle both hover and click events on features in a
> >>>>vector layer. I created two select controls, one with hover set to true,
> >>>>added them to the layer, and activated them.
> >>>>
> >>>>What I'm seeing is that the click select control doesn't receive any of
> >>>>featured selected events, but the hover select control does receive the
> >>>>hover events. If I don't add the hover select control but only the click
> >>>>select control, then I do receive all the click events.
> >>>This is because by default, hovering over a feature also selects
> >>>it. You can change that easily by configuring the one that you use
> >>>for hover with
> >>>
> >>>highlightOnly: true
> >>Meaning, configure the SelectFeature control that you use for hovering with:
> >>
> >>{
> >>    hover: true,
> >>    highlightOnly: true
> >>}
> >>
> >>Regards,
> >>Andreas.
> >>>Hope this helps,
> >>>Andreas.
> >
> >I gave that a shot, but it didn't work for me. I've created a simple
> >example below to reproduce the issue I'm seeing. I've tried it both with
> >the current nightly version of openlayers, as well as this one:
> >http://openlayers.org/api/OpenLayers.js
> >
> >When the hover event gets called, it looks like there aren't any
> >selected features, regardless of whether I have the highlightOnly option
> >set or not. Thoughts?
> >
> >Thanks,
> >Robert
> >
> >
> ><html>
> >  <body>
> >    <div id="map" style="width: 100%, height: 100%"></div>
> >    <script type="text/javascript" src="http://openlayers.org/api/OpenLayers.js"></script>
> >    <!-- nightly version commented out below -->
> >    <!--script type="text/javascript" src="OpenLayers.js"></script-->
> >    <script type="text/javascript">
> >      (function() {
> >       map = new OpenLayers.Map('map', {
> >         projection: new OpenLayers.Projection('EPSG:4326'),
> >         displayProjection: new OpenLayers.Projection('EPSG:4326'),
> >         maxExtent: new OpenLayers.Bounds(-73.99596523804, 40.581940549315, -73.76216244263, 40.855225461425)
> >       });
> >       var baseLayer = new OpenLayers.Layer.WMS("BaseLayer", 'http://maps.opengeo.org/geowebcache/service/wms',
> >         {format: 'image/png', layers: 'openstreetmap'},
> >         {isBaseLayer: true}
> >       );
> >
> >       var vectorLayer = new OpenLayers.Layer.Vector('vectorLayer', {});
> >       var lineString = new OpenLayers.Geometry.LineString([
> >         new OpenLayers.Geometry.Point(-73.9335, 40.7601),
> >         new OpenLayers.Geometry.Point(-73.9115, 40.7612)
> >       ]);
> >       var vectorFeature = new OpenLayers.Feature.Vector(lineString, {}, {strokeWidth: 8, strokeColor: '#ff0000'});
> >       vectorLayer.addFeatures(vectorFeature);
> >
> >       var selectControlClicks = new OpenLayers.Control.SelectFeature(vectorLayer, {
> >         onSelect: function(feature) {
> >           console.log('select: number of selected features: ' + vectorLayer.selectedFeatures.length);
> >         },
> >         onUnselect: function(feature) {
> >           console.log('unselect: number of selected features: ' + vectorLayer.selectedFeatures.length);
> >         },
> >       });
> >       var selectControlHover = new OpenLayers.Control.SelectFeature(vectorLayer, {
> >         hover: true,
> >         highlightOnly: true,
> >         overFeature: function(feature) {
> >           console.log('hover: number of selected features: ' + vectorLayer.selectedFeatures.length);
> >         },
> >         outFeature: function(feature) {
> >           console.log('hover out: number of selected features: ' + vectorLayer.selectedFeatures.length);
> >         },
> >       });
> >
> >       map.addControl(selectControlClicks);
> >       selectControlClicks.activate();
> >
> >       //*
> >       map.addControl(selectControlHover);
> >       selectControlHover.activate();
> >       /**/
> >
> >       map.addLayer(baseLayer);
> >       map.addLayer(vectorLayer);
> >       map.zoomToExtent(vectorLayer.getDataExtent());
> >      })();
> >    </script>
> >  </body>
> ></html>
> 
> 
> -- 
> Andreas Hocevar
> OpenGeo - http://opengeo.org/
> Expert service straight from the developers.



More information about the Users mailing list